我想将存储在sqlite表中的数据插入到QTableWidget
。我使用两个for
循环来查找数据和索引。每次迭代之后,我在控制台中打印数据,这是正常的,但是当它显示table小部件时,只有第一行和最后一行填充了数据。
有办法解决这个问题吗?
很明显,tblTable
是一个QTableWidget
!
下面是代码的这一部分:
cursor.execute('''SELECT * FROM MyTable''')
for index , form in enumerate(cursor.fetchall()):
i = 0
for item in form:
print(str(item))
self.tblTable.setItem(index, i, QtGui.QTableWidgetItem(str(item)))
i = i + 1
self.tblTable.insertRow(1)
您继续在位置1插入新行。发生的情况是,先前输入的数据随后被上移一行,此时您将在下一个循环中覆盖该数据。
所以,第一次迭代的所有内容都被插入第0行,在索引1处添加一行。然后用数据更新第1行,并在位置1插入另一行,使先前修改的行移动到第2行。下一个循环,覆盖第2行的数据,在位置1插入另一个空行,将包含数据的行移动到位置3,然后再次覆盖它,等等
在开始时将行计数设置为0,并在插入列数据之前根据需要插入行:
我对QtTableWidget不太熟悉,它可能是不断地在not-to-perform中添加行以及设置前面的行数。
如果sqlite的
cursor.rowcount
属性在您的查询中得到正确更新(它并不总是这样),那么最好使用该值调用.setRowCount
:如果
.rowcount
值不可用(设置为1或类似值),可能首先向数据库询问行数有助于:在上面的所有示例中,我还将变量重命名为更接近其用途的变量,并在item循环中使用了
enumerate
。最后,但并非最不重要的是,游标可以充当iterator,这意味着您可以直接循环行而不调用.fetchall()
,行将根据需要获取。相关问题 更多 >
编程相关推荐