我已经能够使用QTableWidget和QTableWidgetItem根据搜索栏中返回的文本将数据从我们的数据库填充到QTableWidget中。虽然我能够将搜索到的项目填充到一个tablewidget中,但是我无法将搜索栏中的产品继续添加到tablewidget中。相反,结果只是被覆盖并被替换。这是我的代码示例。
# Defines Search Bar Button
def search_Bar(self):
searchFor = self.searchBar.text()
#print(searchFor)
searchQ = c.execute(" SELECT * FROM databasetable WHERE title LIKE ('%' || ? || '%') ", (searchFor,))
self.tableWidget.setRowCount(0)
for row_number, row_data in enumerate(searchQ):
self.tableWidget.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))
上面的代码将产生所需的结果,但是当我尝试将多个项目添加到QTableWidget时,它会覆盖以前选择的项目。
是否可以在不覆盖之前的选择的情况下使用setItem?我希望能够创建所需搜索结果的表格。如果需要,我们也希望清除表格。
答案 0 :(得分:1)
以防万一其他人迷迷糊糊,我可以在下面使用它。
行数必须在循环内,因为它不断增加,我一开始在循环上方也有该行,并且遇到了问题。
for elem in res_a:
domain_a = elem.host
row_number = self.w_tablewidget.rowCount()
self.w_tablewidget.insertRow(row_number)
self.w_tablewidget.setItem(
row_number, 0, QTableWidgetItem(str(site)))
self.w_tablewidget.setItem(
row_number, 1, QTableWidgetItem(str('A')))
self.w_tablewidget.setItem(
row_number, 2, QTableWidgetItem(str(elem.host)))
并且如上所述,您可以使用“ setRowCount(0)”或通过“ .clearContents()”清除它
赞:
self.w_tablewidget.clearContents()
self.w_tablewidget.setRowCount(0)
答案 1 :(得分:0)
要将搜索结果附加到表格而不覆盖之前的表格内容,请在添加项目之前不要致电setRowCount(0)
,并使用当前rowCount()
作为row_number
:
# Append search results to table
def search_Bar(self):
searchFor = self.searchBar.text()
searchQ = c.execute(" SELECT * FROM databasetable WHERE title LIKE ('%' || ? || '%') ", (searchFor,))
for row_data in searchQ:
# insert new row at the end of the tableWidget
row_number = self.tableWidget.rowCount()
self.tableWidget.insertRow(row_number)
for column_number, data in enumerate(row_data):
self.tableWidget.setItem(
row_number, column_number, QTableWidgetItem(str(data)))
如果要清除表格(例如,点击"清除表格"按钮),您可以调用以下功能:
# Clear the table
def clear_table(self):
self.tableWidget.setRowCount(0)