【问题标题】:I am using QSqlDatabase and QTableView to display a table but somehow the the GUI shows an empty table(no header even)我正在使用 QSqlDatabase 和 QTableView 来显示一个表,但不知何故 GUI 显示一个空表(甚至没有标题)
【发布时间】:2020-04-08 10:49:06
【问题描述】:
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()

【问题讨论】:

    标签: python pyqt pyqt5 qsqltablemodel


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-13
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多