habe mal wieder ein kleine Frage.
Die Lösung ist vermutlich sehr einfach, aber nach 1,5 Std. Suche habe ich nun kapituliert.
Ich find die Lösung leider nicht alleine -.-
Code: Alles auswählen
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
import csv
import re
from collections import OrderedDict
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, \
                            QHBoxLayout, QLineEdit, QPushButton, QTextEdit, \
                            QCompleter, QTableWidget, QTableWidgetItem, \
                            QInputDialog, QMessageBox
class Lager():
    def __init__(self):
        self.lager = OrderedDict()
        self.artikelbezeichnungen = [] #Benötigt für Vorschläge in Autocomplete
        self.feldnamen = [] #Benötigt zur Erstellung der Feldnamen der Tabelle 
        
    def csv_einlesen(self, csvdatei):
        with open(csvdatei, "r") as datei:
            reader =  csv.DictReader(datei, delimiter=";")
            self.feldnamen = reader.fieldnames
            reader = sorted(reader, key=lambda d: d["Artikelbezeichnung"])
            vortlaufendenummer = 1
            
            print("-------------------------------------------------------")
            print("|folgende Artikel wurden aus der CSV Datei eingelesen:|")
            print("-------------------------------------------------------")
            
            for zeile in reader:
                self.lager[vortlaufendenummer] = zeile
                print(self.lager[vortlaufendenummer])
                self.artikelbezeichnungen.append(self.lager[vortlaufendenummer]\
                                                 ["Artikelbezeichnung"])        
                vortlaufendenummer += 1
            return (list(range(0,vortlaufendenummer)))
                
    
class Lieferanten():
    def __init__(self):
        self.lieferanten = {}
        
class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.fenstereinstellungen()
        self.warenbestand = Lager()
        
        self.erzeugeWidgets()
        self.erzeugeLayout()
        self.warenbestand.csv_einlesen("Artikelliste-oop.csv")
        self.tabelle_erzeugen(tuple(self.warenbestand.lager.keys()))
        self.autovervollstaendigung()
        self.show()
        
    # Setzt die allgemeinen Eistellungen des Hauptfensters    
    def fenstereinstellungen(self):
        self.resize(1500, 600)
        self.setWindowTitle("Bestellung V1.0")
        
    # Definition der benötigten Windows    
    def erzeugeWidgets(self):
        self.labeltreffer = QLabel()
        self.tablewidget = QTableWidget()
        self.suchleiste = QLineEdit(self)
        self.suchleiste.returnPressed.connect(self.artikel_suchen_und_anzeigen)
        self.suchleiste.setToolTip("Artikelbezeichung, oder Artikelnummer "\
                                   "eingeben")
        self.sfsuche = QPushButton("Suchen", self)
        self.sfsuche.clicked.connect(self.artikel_suchen_und_anzeigen)
        self.sfbestellen = QPushButton("Bestellen", self)
        self.sfbestellen.clicked.connect(self.bestellmenge_auswaehlen)
        self.sfsenden = QPushButton("Senden", self)
        self.sfsenden.clicked.connect(self.lieferant_auswaehlen)
        self.sfbeenden = QPushButton("Beenden", self)
        self.sfbeenden.clicked.connect(self.programm_beenden)
        
    # Setzen des Layouts    
    def erzeugeLayout(self):
        hBoxLay1 = QHBoxLayout()
        hBoxLay1.addWidget(self.suchleiste)
        hBoxLay1.addWidget(self.sfsuche)
            
        vBoxLay2 = QVBoxLayout()
        vBoxLay2.addWidget(self.labeltreffer)
        vBoxLay2.addWidget(self.tablewidget)
        
        hBoxLay3 = QHBoxLayout()
        hBoxLay3.addWidget(self.sfbestellen)
        hBoxLay3.addWidget(self.sfsenden)
        hBoxLay3.addWidget(self.sfbeenden)
        
        masterbox = QVBoxLayout()
        masterbox.addLayout(hBoxLay1)
        masterbox.addLayout(vBoxLay2)
        masterbox.addLayout(hBoxLay3)
        self.setLayout(masterbox)
         
        
    # Autovervollständigung des Suchen-feldes oben am Fensterrand
    def autovervollstaendigung(self):
        vorschlaege = self.warenbestand.artikelbezeichnungen
        autocomplete = QCompleter(vorschlaege)
        self.suchleiste.setCompleter(autocomplete)
    # Erzeugen der Tabelle mit den übergebenen Artikelnummern aus der
    # übergebenen Liste
    def tabelle_erzeugen(self, artikelnummernliste):
        self.tablewidget.setColumnCount(len(self.warenbestand.feldnamen))
        self.tablewidget.setHorizontalHeaderLabels(self.warenbestand.feldnamen)
        zeile = 0
        print("----------------------------------------------------")
        print("|folgende Artikel wurden in die Tabelle geschrieben|")
        print("----------------------------------------------------")
        
        for artikelnummer in artikelnummernliste:
            zeile += 1
            self.tablewidget.setRowCount(zeile)
            spalte = 0
            print(self.warenbestand.lager[artikelnummer])
            print(artikelnummer)
            for schluessel in self.warenbestand.lager[artikelnummer]:
                print(zeile, spalte, str(self.warenbestand.lager[artikelnummer][schluessel])) 
                self.tablewidget.setItem(zeile, spalte, \
                                         QTableWidgetItem(str(self.warenbestand.lager[artikelnummer][schluessel])))
                spalte += 1
        self.labeltreffer.setText("Es wurden " + str(zeile) +\
                                  " Artikel gefunden")
        """
        # Aufbau und Anwendung wie Werte in eine Zelle geschrieben werden
        #self.tablewidget.setItem(0,0, QTableWidgetItem("Zellenname0"))
        #self.tablewidget.setItem(0,1, QTableWidgetItem("Zellenname1"))
        #self.tablewidget.setItem(0,2, QTableWidgetItem("Zellenname2"))
        """
        
    # Such nach den eingegebenen Textteilen in allen Artikelbezeichungen und
    # und gibt diese dann durch aufruf der tabelle_erzeugen funktion aus
    def artikel_suchen_und_anzeigen(self):
        durchlaufzaehler = 0
        suchbegriff = "".join(["[" + str(zeichen).upper() +\
                               str(zeichen).lower() + "]"\
                               for zeichen in self.suchleiste.text()])
        print("------------------------------------------------")
        print("|Die Suche nach Artikel ergab folgende Nummern:|")
        print("------------------------------------------------")
        print("Gesuchte Zeichenkette: " + suchbegriff)
        gefundene_artikelnummern = []
        for artikelnummer in self.warenbestand.lager:
            if re.findall(suchbegriff, self.warenbestand.lager[artikelnummer]\
                          ["Artikelbezeichnung"]):
                gefundene_artikelnummern.append(artikelnummer)       
            durchlaufzaehler += 1
        print("passende Artikelnummern: " + str(gefundene_artikelnummern))
            
        if durchlaufzaehler == 0:
            self.labeltreffer.setText("Es konnte kein Treffer ermittelt werden")
        self.tabelle_erzeugen(gefundene_artikelnummern)
    
        
    # Auswahl der zu bestellenden Menge die dem Artikel hinterlegt werden soll  
    def bestellmenge_auswaehlen(self):
        menge, check = QInputDialog.getInt(self, "Bestellmenge",
                                           "Zu bestellenden Menge eingeben:",
                                           value=1)
        #if check:
            
        
    # Auswahl des Lieferanten dem die Bestellung gesendet werden soll
    def lieferant_auswaehlen(self):
        lieferanten = ("Innstolz", "optima", "Hofmark")
        lieferant, check = QInputDialog.getItem(self, "Lieferant",
                                                   "Lieferanten auswählen:",\
                                                lieferanten)
        #if check:
        
    # Beenden des Programmes    
    def programm_beenden(self):
        reply = QMessageBox.question(self, "Achtung", "Möchten Sie die " \
                                     "Anwendung wirklich schließen?", \
                                     QMessageBox.Yes | QMessageBox.No, \
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            QCoreApplication.quit()
        
def main():
    app = QApplication(sys.argv)
    w = Window()
    sys.exit(app.exec_())  
        
        
if __name__ == "__main__":
    main()
Das bei mir auftauchende Problem erscheint beim Aufruf der Funktion "tabelle_erzeugen".
Es sollte anhand der übergeben Liste die jeweiligen Elemente in die QTableWidgets übergeben werden.
Es wird eine Tabelle erzeugt, diese hat auch so viele Zeilen wie sich in der Csv Datei befinden, bzw.
so viele wie durch die Suchfunktion Elemente gefunden werden. Nur bleiben die Felder leer, also es steht kein Text darin.
Ich bin neu in der GUI Programmierung und kann es mir nicht erklären.
Das Programm ist noch NICHT fertig!
Es wurde bisher nur der Aufbau, Import und Anzeige fertig gestellt.
Die Funktionen "bestellmenge_auswaehlen" und "lieferant_auswaehlen" sind nur ganz grob notiert.
Ich würde mich daher sehr über Hilfe freuen.
