将数据从 Sqlite3 数据库插入到 QTableWidget

Inserting data from an SqlLite3 database into a QTableWidget

我正在为我们的测试平台构建一个 GUI,已指示用户应该能够 select 测试从 table 到 运行。我在将数据放入 table 本身时遇到问题。我可以很好地获取数据,但无法填充 QTableWidget

这是我尝试用

填充 table 的数据样本
Id | Test name    | Owner | Script source
---|-----------   |-------|--------------
 1 | Login        |  1    | test_login_s
 2 | Logout       |  1    | test_logout_s
 3 | User > Edit  |  1    | test_user_edit_s

最初,我尝试使用 sqlite3 包来完成此任务,但阅读使我找到了 QtSQL 包,它似乎更容易用于给定任务。

这是我使用 QtSQL.

实现的最新尝试
def load_data(self):
    connection = sqlite3.connect('data.db')
    cursor = connection.cursor()
    cursor.execute('''SELECT * FROM Tests''')
    rows = cursor.fetchall()
    for row in range(len(rows)):
        for column in range(len(rows[row])):
            self.tblTests.setItem(row, column, QtWidgets.QTableWidgetItem(rows[row][column]))

这导致 Noneself.tblTests.setItem(row, column, QtWidgets.QTableWidgetItem(rows[row][column])) 返回。

我也试过下面的方法

    for row, key in enumerate(rows):
        for column, data in enumerate(rows[row]):
            self.tblTests.setItem(row, column, QtWidgets.QTableWidgetItem(str(data)))

在这种情况下,data returns

1
Login
1
test_login_s
2
Logout
1
test_logout_s
3
User > Edit
1
test_user_edit_s

这似乎是在正确的轨道上。但是,它仍然没有填充 tblTests

在尝试调试上述代码并看到 data 返回值后,我认为一定有问题。

浏览 setupUI() 函数后,我看到了 self.tblTests.setColumnCount(0) 行。最初,由于 setItem() 调用,我认为这一行是多余的,但为了调试,我决定将其保留在代码中。

我在黑暗中试了一下,将 self.tblTests.setColumnCount(0) 设置为 4,现在可以正常工作了。

我在文档中没有看到任何提示 setColumnCount 需要在阅读文档时手动输入。

希望这对其他人也有帮助!