Python QTreewidget按钮插入每隔一行跳过

时间:2016-12-02 07:05:25

标签: python qt

我有以下代码,我使用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并尝试它。

请告诉我代码,如果可能的话,我出错的地方,或者我必须使用不同的课程。

此致

1 个答案:

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