【发布时间】:2021-01-06 20:51:44
【问题描述】:
我正在尝试创建一个 QDialog,让用户能够根据他们的输入搜索数据。数据已连接到数据库。
用户输入他们想要查找的内容 {self.search_name.text()} 然后在数据库 {self.c.execute} 中查询并在点击搜索后显示在 QTableWidget {package_list} 中(self.loaddata )。
我遇到的问题是将数据加载到表中。我知道查询有效,因为如果我预定义我想在我的代码中查找的内容,该表将填充。运行脚本时我没有收到任何错误。
关于如何在不使用 QDialog 的情况下解决此问题或以其他方式实现相同目标的任何想法?
class SearchPackageByNameDialog(QDialog):
def __init__(self, *args, **kwargs):
super(SearchPackageByNameDialog, self).__init__(*args, **kwargs)
self.setStyleSheet("background-color: rgb(28, 66, 32);\n"
"font: 10pt \"Courier New\";\n"
"")
loadUi('GUIs/PackageLookupNameDailog.ui',self)
self.btn_search.clicked.connect(self.loaddata)
self.loaddata()
def loaddata(self):
searchrol = self.search_name.text()
searchresult = '"'+searchrol+'"'
self.conn = sqlite3.connect("database.db")
self.c = self.conn.cursor()
self.c.execute("CREATE TABLE IF NOT EXISTS Packages(Tracking_Number TEXT PRIMARY KEY,Recipient TEXT,DateIn TEXT,DateOut TEXT)")
self.c.close()
self.package_list = QtWidgets.QTableWidget(self)
self.package_list.setGeometry(QtCore.QRect(10, 110, 600, 300))
self.package_list.setAlternatingRowColors(True)
self.package_list.setColumnCount(4)
self.package_list.setColumnWidth(0,200)
self.package_list.setColumnWidth(1,200)
self.package_list.setColumnWidth(2,100)
self.package_list.setColumnWidth(3,100)
self.package_list.horizontalHeader().setCascadingSectionResizes(False)
self.package_list.horizontalHeader().setSortIndicatorShown(False)
self.package_list.horizontalHeader().setStretchLastSection(True)
self.package_list.verticalHeader().setVisible(False)
self.package_list.verticalHeader().setCascadingSectionResizes(False)
self.package_list.verticalHeader().setStretchLastSection(False)
self.package_list.setHorizontalHeaderLabels(("Tracking Number", "Recipient", "Date In", "Date Out"))
self.package_list.setStyleSheet("font: 14pt 'Courier New';background-color: rgb(114, 104, 112);\n"
"alternate-background-color: rgb(124, 136, 126);\n"
"border-color: rgb(160, 141, 131);\n"
"gridline-color: rgb(145, 150, 127);")
self.connection = sqlite3.connect("database.db")
query = "SELECT * from Packages WHERE recipient IS "+str(searchresult)
result = self.connection.execute(query)
print(query)
self.package_list.setRowCount(0)
for row_number, row_data in enumerate(result):
self.package_list.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.package_list.setItem(row_number, column_number,QTableWidgetItem(str(data)))
self.connection.close()
【问题讨论】:
标签: python pyqt5 qt-designer qtablewidget qdialog