QTableView zeigt keine Daten aus Datenbank an

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Mars82
User
Beiträge: 13
Registriert: Freitag 19. November 2021, 23:46

Hi,

ich habe mit dem QtDesigner ein TableView erzeugt und möchte darin die Daten aus einer Datenbank anzeigen sobald ein Button geklickt wird.
Sobald ich den Code ausführe und den Button klicke erscheint folgende Fehlermeldung:
>>
self.viewtable.setRowCount(0)
AttributeError: 'PySide6.QtWidgets.QTableView' object has no attribute 'setRowCount'
<<

Folgenden Code verwende ich dafür:

Code: Alles auswählen

import sqlite3
from PySide6.QtWidgets import QApplication, QWidget, QTableWidget
from PySide6.QtWidgets import QMainWindow
from TestGui import Ui_MainWindow

class Frm_main(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.bt_aktualisieren.clicked.connect(self.aktualisieren)


 def aktualisieren(self):
        connection = sqlite3.connect("personendaten.db")
        cursor = connection.cursor()
        sql =("SELECT name, adresse, alter, beruf, auto, land wo, wann FROM personen")
        result= connection.execute(sql)
        self.viewtable.setRowCount(0)
        for row_number, row_data in enumerate(result):
            self.viewtable.insertRow(row_number)
            for column_number, data in enumerate(row_data):
                self.viewtable.setItem(row_number, column_number, QWidget.QTableWidgetItem(str(data)))
        connection.close()


 def ende(self):
        frm_main.destroy()

Die Fehlermeldung sagt mir das Pyside6 ein derartiges Attribut "setRowCount" nicht mehr verwendet, ich vermute das war ein Attribut vom alten Pyside2.
Kann mir jemand sagen was das neue Attribut dazu lautet? Ich finde es mit Google einfach nicht. Vielen Dank.

Gruß Mars82
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum willst du denn dieses Rowcount setzen?

Ich bin im übrigen beeindruckt, wieviel Tipparbeit durch das weglassen des o in Frm_main gespart wurde. Noch besser: Fr_mn! Achtung, kann Spuren von Ironie enthalten.
Mars82
User
Beiträge: 13
Registriert: Freitag 19. November 2021, 23:46

Hi _deets_,

ich habe den Text so von Google weil es keine andere Quelle gibt, wo drin steht wie man Daten aus einer Datenbank in einem Tableview anzeigen lässt. Da war das Rowcount mit drin.
Ich habe zwei Python Bücher, die beide noch mit Pyside2 arbeiten. Das bringt mir ja nix und in Google habe ich es bisher leider nicht gefunden.

Gruß Mars82
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst nicht nur nach fertigem Code schauen. Sondern den auch verstehen. Die Qt Dokumentation sagt klar, was einen rowcount von 0 zu setzen macht - die bestehende Zeilen löschen. Das macht man so nicht mehr. Ich verspreche dir, wenn du mal in diese Dokumentation schaust, findest du eine Alternative.
Mars82
User
Beiträge: 13
Registriert: Freitag 19. November 2021, 23:46

Hi _deets_,

ok hier meine Lösung:

Code: Alles auswählen

class Frm_main(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.bt_beenden.clicked.connect(self.ende)
        self.bt_speichern.clicked.connect(self.speichern)
        self.bt_aktualisieren.clicked.connect(self.aktualisieren)
        model_patient = QtSql.QSqlRelationalTableModel()
        model_patient.setTable("patientendaten")
        model_patient.select()
        self.viewtable.setModel(model_patient)
 
db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("patientdb.db")


app = QApplication()
frm_main = Frm_main()
frm_main.show()
app.exec()
        
Danke für den Hinweis.

Gruß Mars82
Antworten