PyQt QTableWidget setItem循环

时间:2018-02-22 17:18:53

标签: python qt pyqt qtablewidget qtablewidgetitem

我已经能够使用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?我希望能够创建所需搜索结果的表格。如果需要,我们也希望清除表格。

2 个答案:

答案 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)