per QT-Designer erstellte UI, Daten aus SQLite in tableWidget ???

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
foto2004
User
Beiträge: 16
Registriert: Samstag 27. Juni 2020, 12:57

Hallo Gemeinde, ich versuche schon seit Tagen in ein, per QT-Designer erstellte UI (tableWidget) Daten per Button einzulesen aber nichts passiert.

Code: Alles auswählen

def sqlAuselsen():
    verbindung = sqlite3.connect("pers.db")
    zeiger = verbindung.cursor()
    zeiger.execute("SELECT * FROM personen")
    inhalt = zeiger.fetchall()

    mainWindow.tableWidgetPers.setRowCount(0)

    for row_number, row_data in enumerate(zeiger):
        mainWindow.tableWidgetPers.insertRow(row_number)
        for column_number, data in enumerate(row_data):
            cell = QtWidgets.QTableWidgetItem(str(data))
            mainWindow.tableWidgetPers.setItem(row_number,column_number,cell)
            # mainWindow.tableWidgetPers.setItem(row_number, colum_number, QtWidgets.QTableWidgetItem(str(data)))
              
    
    verbindung.close()

das tableWidget wurde von mir tableWidgetPers genannt.

das mit dem mainWindow.tableWidgetPers.setRowCount(0) macht er noch aber er liest keine Daten ein.
Daten einfügen geht. Ich habe mir etliche Tutorials angeschaut aber irgend wie schnalle ich es nicht ganz. Kann mir da mal eine Stups in die richtige Richtung geben?
noch ganz am Anfang vom Lernen ...
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

Du hast hier kein PyQt-Problem, sondern bist mit dem Ausgeben der Datensätze durcheinander gekommen. Erst hast Du mit

Code: Alles auswählen

inhalt = zeiger.fetchall()
alle Sätze geholt und die Liste der Variablen inhalt zugewiesen. So weit zwar nicht zwingend nötig, aber durchaus korrekt. Dann musst Du aber bei der weiteren Verarbeitung dieser Daten auch tatsächlich auf inhalt und nicht mehr auf zeiger zugreifen (zeiger hat jetzt keine Daten mehr!) - und da hast Du Dich vertan und

Code: Alles auswählen

for row_number, row_data in enumerate(zeiger):
...
hingeschrieben. Ohne den vorherigen Aufruf von zeiger.fetchall() wäre das auch eine völlig korrekte Variante - aber nach diesem Aufruf eben nicht mehr.
foto2004
User
Beiträge: 16
Registriert: Samstag 27. Juni 2020, 12:57

Dankeschön das war der Fehler den ich da gemacht habe.
noch ganz am Anfang vom Lernen ...
foto2004
User
Beiträge: 16
Registriert: Samstag 27. Juni 2020, 12:57

Noch eine Frage, wenn's erlaub ist

da ich was, Python und PyQt5 + QT-Designer angeht, Neuling bin interessiert mich natürlich ob es da einige Beispiel gibt wie man z. B. da eine Zeile auswählt um mit den Daten genau dieser Zeile weiterarbeitet,
ich bin mir sicher dass es da im Internet einige Beispiele gibt aber ich weis nicht genau wonach ich da suchen muss. Gerne auch Bücher die genau das Thema bearbeiten und nicht nur streifen.
noch ganz am Anfang vom Lernen ...
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

Es gibt ein richtiges Lehrbuch zu PyQt, allerdings zur Version 4, hier beschrieben:
http://www.qtrac.eu/pyqtbook.html
Weiterhin benutzbar, wenn man die offizielle Dokumentation dazu nimmt. Da bin ich derzeit glücklicher mit der Dokumentation zu PySide2, auf den offiziellen Qt-Seiten:
https://doc.qt.io/qtforpython/.
Gerade sehe ich ein lästiges Problem in der PySide2-Dokumentation bei der Beschreibung der einzelnen Klassen: zwar sind ihre Methoden und Eigenschaften in Python-Syntax beschrieben, aber die Code-Beispiele im Beschreibungstext sind C++. Und gerade der Beschreibungstext ist wichtig und nützlich. Da ist schlimmstenfalls ein bisschen Raten angesagt. Oder, was ich gar nicht richtig kenne, das Qt-Wiki (https://wiki.qt.io/Language_Bindings#Qt_for_Python).

Die Unterschiede zwischen PySide2 und PyQt5 sind gering, hauptsächlich die Importe und der Umgang mit den Designer-Dateien. Dafür braucht man dann noch die PyQt5-Dokumentation:
https://www.riverbankcomputing.com/stat ... index.html

Und in allen Zweifelsfällen hier fragen.
foto2004
User
Beiträge: 16
Registriert: Samstag 27. Juni 2020, 12:57

Danke für die Infos,

werde ich gleich mal durchschauen.

mir geht es in der Hauptsache um das Zusammenspiel von QT- Designer mit PyQt5 wie ich herausfinden kann welche Ereignisse der QT- Designer zurück gibt die ich danach weiterverarbeiten kann, wie z. B.

Code: Alles auswählen

mainWindow.pushButtonListe.clicked.connect(sqlAuselsen)
wenn ich einen Button klicke usw.

da bringt ja "pushButtonListe" das Ereignis "clicked" mit dem ich dann weiterarbeiten kann.

Gibt es da irgendwo eine art Liste oder so wo man das erfahren kann was da jeweils zu verarbeiten da ist?

Ich weiß sind sau dumme Formulierungen aber ich hoffe ihr wisst was ich meine.
noch ganz am Anfang vom Lernen ...
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@foto2004: Die Frage hat überhaupt nichts mit dem Designer zu tun. Du musst halt in der Qt-Dokumentation schauen was das jeweilige Objelt für Signale hat. Gegebenfalls auch die Oberklasse(n) anschauen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
foto2004
User
Beiträge: 16
Registriert: Samstag 27. Juni 2020, 12:57

Ich würde mir wünschen dass es eine Liste / Verzeichnis gäbe wo man da nachschauen kann den das was ich finde ist meistens mit viel text drum herum so dass man ewig lesen muss um dann festzustellen dass es nicht die benötigte info ist. Gibt es so etwas?
noch ganz am Anfang vom Lernen ...
foto2004
User
Beiträge: 16
Registriert: Samstag 27. Juni 2020, 12:57

So etwas:

https://coderslegacy.com/python/pyqt-qlineedit/

Nur leider sind da nur einige wenige aufgelistet.
noch ganz am Anfang vom Lernen ...
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@foto2004: Nochmal: Die Qt-Dokumentation. Lerne die zu Navigieren. Such Dir das Widget, da dann die Signale. Stehen im Inhaltsverzeichnis unter, wer hätte das gedacht: „Signals“. Bei `QLineEdit` sind das sechs Stück + drei von `QWidget` + zwei von `QObject`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten