Я использую QSqlDatabase и QTableView для отображения таблицы, но каким-то образом графический интерфейс показывает пустую таблицу (даже без заголовка)

class Window2(QMainWindow):
    def __init__(self):
       super().__init__()
       win = QWidget()
       self.title = "Court Case Database Management System1"
       self.top = 200
       self.left = 500
       self.width = 400
       self.height = 300
       self.setWindowTitle(self.title)
       self.setGeometry(self.left, self.top, self.width, self.height)

       layout = QVBoxLayout()

       self.tabwidget = QTabWidget()
       win = self.tabwidget
       self.tab1 = QWidget()
       self.tab2 = QWidget()
       self.tab3 = QWidget()
       self.tab4 = QWidget()
       self.tab5 = QWidget()
       self.tab6 = QWidget()

       self.tab1.layouttab1 = QVBoxLayout(self)
       self.tableWidget = QTableWidget()
       db = QSqlDatabase.addDatabase("QMYSQL")
       db.setHostName("localhost")
       db.setDatabaseName("cs_220")
       db.setUserName("root")
       db.setPassword("basimehsan")
       ok = db.open()
       self.model = QSqlQueryModel()
       self.model.setQuery("select * from cs_220.lawyer")
       self.model.setHeaderData(0, Qt.Horizontal, "Lawyer Id")
       self.model.setHeaderData(1, Qt.Horizontal, "First Name")
       self.model.setHeaderData(2, Qt.Horizontal, "Last Name")
       self.model.setHeaderData(3, Qt.Horizontal, "Specialization")
       self.model.setHeaderData(4, Qt.Horizontal, "Years of Experience")
       self.model.setHeaderData(5, Qt.Horizontal, "Phone")
       self.model.setHeaderData(6, Qt.Horizontal, "Email")
       self.view = QTableView()
       self.view.setModel(self.model)
       self.view.setItemDelegate(QSqlRelationalDelegate(self.view))
       self.view.show()


       self.tab1.layouttab1.addWidget(self.view)
       self.tab1.setLayout(self.tab1.layouttab1)

       self.tabwidget.addTab(self.tab1, "Lawyer")
       self.tabwidget.addTab(self.tab2, "Judge")
       self.tabwidget.addTab(self.tab3, "Plaintiff")
       self.tabwidget.addTab(self.tab4, "Defendant")
       self.tabwidget.addTab(self.tab5, "Court")
       self.tabwidget.addTab(self.tab6, "Case")
       #win.show()
       self.setCentralWidget(win)
       #self.show()

введите здесь описание изображения


person Imdumb    schedule 15.12.2019    source источник


Ответы (1)


Мне не удалось полностью протестировать MRE, но я создал следующий код, который должен позволить нам получить некоторое сообщение об ошибке, дающее нам информацию о проблеме.

class Window2(QMainWindow):
    def __init__(self):
        super().__init__()
        win = QWidget()
        self.title = "Court Case Database Management System1"
        self.top = 200
        self.left = 500
        self.width = 400
        self.height = 300
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        layout = QVBoxLayout()

        self.tabwidget = QTabWidget()
        win = self.tabwidget
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()
        self.tab4 = QWidget()
        self.tab5 = QWidget()
        self.tab6 = QWidget()

        self.tab1.layouttab1 = QVBoxLayout()
        self.tableWidget = QTableWidget()
        self.view = QTableView()
        self.tab1.layouttab1.addWidget(self.view)
        self.tab1.setLayout(self.tab1.layouttab1)

        for name, tab in zip(
            ("Lawyer", "Judge", "Plaintiff", "Defendant", "Court", "Case"),
            (self.tab1, self.tab2, self.tab3, self.tab4, self.tab5, self.tab6),
        ):
            self.tabwidget.addTab(tab, name)
        self.setCentralWidget(win)

        db = QSqlDatabase.addDatabase("QSQLITE")
        db.setHostName("localhost")
        db.setDatabaseName("cs_220")
        db.setUserName("root")
        db.setPassword("basimehsan")

        if not db.open():
            print(db.lastError().text())
            return

        self.model = QSqlQueryModel()
        self.view.setModel(self.model)
        self.model.setQuery("select * from cs_220.lawyer")
        if self.model.lastError().isValid():
            print(self.model.lastError().text())
            return

        for i, text in enumerate(
            (
                "Lawyer Id",
                "First Name",
                "Last Name",
                "Specialization",
                "Years of Experience",
                "Phone",
                "Email",
            )
        ):
            self.model.setHeaderData(i, Qt.Horizontal, name)
        self.view.setItemDelegate(QSqlRelationalDelegate(self.view))
person eyllanesc    schedule 15.12.2019