python - 我正在使用 QSqlDatabase 和 QTableView 来显示一个表,但是 GUI 以某种方式显示一个空表(甚至没有标题)
问题描述
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()
解决方案
我无法完全测试 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))
推荐阅读
- php - 如何在 laravel 中显示具有 is_admin 属性的管理员列表?
- python - Python3 skimage:未定义符号:_gfortran_stop_numeric_f08
- javascript - 当页面首次加载或刷新 api post call 第一次不能正常工作,但在切换按钮一两次后效果很好
- javascript - 不确定现有项目是否正在使用其他数据格式的 blob 文件
- unzip - 如何使用yauzl解压到一个文件夹?
- model - Yii2 根据用户角色分配模型规则
- swiftui - XCode 12 中的“预览资产”有什么用?
- git - 如何安全地推送之前的提交而不会丢失前面的提交
- c# - Linq Left Join 选择一个集合作为属性
- javascript - 导航到另一个模块(Angular)中的组件