将数据从SqlLite3数据库插入QTableWidget

时间:2019-02-08 10:36:35

标签: python pyqt qtsql

我正在为我们的测试平台构建GUI,已指示用户应该能够从表中选择要运行的测试。我在将数据放入表本身时遇到问题。我可以正常获取数据,但无法填充QTableWidget

这是我尝试用表填充数据的示例

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返回

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

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

1 个答案:

答案 0 :(得分:0)

尝试调试上面的代码后,看到data返回了值,我以为必须关闭某些东西。

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

我在黑暗中刺了一下,并将self.tblTests.setColumnCount(0)设置为4,现在可以正常使用了。

我在文档中什么都没有看到,建议在阅读文档时需要手动输入setColumnCount

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