我有以下代码,我使用python和Qt创建一个ui,我可以看到表中的数据。运行良好,但我试图在最后一列插入一个按钮,这只是我创建的一个列作为按钮的“占位符”。 (我不使用该栏中的数据)
但我的问题是我按下了按钮,但只插入了每一行。即使表中的行已经停止,它也会继续插入每一行。
col = self.dbu.GetColumn_names()
table = self.dbu.GetTable()
for c in range (len(col)):
self.treeWidget.headerItem().setText(c, col[c])
self.treeWidget.clear()
cw = QTreeWidget()
cw.setColumnCount(len(col))
for item in range(len(table)):
QTreeWidgetItem(self.treeWidget)
for value in range(len(table[item])):
if value != 4:
self.treeWidget.topLevelItem(item).setText(value, str(table[item][value]))
else:
i = QTreeWidgetItem(self.treeWidget)
b = QPushButton("push me " + str(value), cw)
self.treeWidget.setItemWidget(i, [4][0], b)
我复制并粘贴了来自世界各地的代码,并尝试了一百件事,我得到的最好的是在第一行以外的每一行都有一个按钮。
大多数讨论这个问题的文献都是用C#/ C ++编写的,我不知道如何将代码转换为python并尝试它。
请告诉我代码,如果可能的话,我出错的地方,或者我必须使用不同的课程。
此致
答案 0 :(得分:1)
i = QTreeWidgetItem(self.treeWidget)
会附加一个新行,因此您为数据添加了一行,为小部件添加了另一行,为您提供了交替的行。
我也不确定
cw = QTreeWidget()
cw.setColumnCount(len(col))
是。它似乎是一个刚刚丢弃的新QTreeWidget。
[4][0]
是我见过的最奇怪的4
写作方式。
无论如何,这是你的主要for循环修复:
for row in range(len(table)):
# appends new row to self.treeWidget
rowItem = QTreeWidgetItem(self.treeWidget)
for column in range(len(table[item])):
if column != 4:
rowItem.setText(column, str(table[row][column]))
else:
button = QPushButton("push me " + str(value), self.treeWidget)
self.treeWidget.setItemWidget(rowItem, 4, button)