2016-12-02 79 views
0

我有以下代碼,我使用python和Qt創建一個ui,我可以在其中查看錶中的數據。工作正常,但我試圖在最後一列插入一個按鈕,這只是我爲按鈕創建的一個「佔位符」列。 (我不使用該列中的數據)Python QTreewidget按鈕插入每隔一行跳過

但我的問題是,我得到的按鈕插入,但只有每隔一行。即使當表中的行停止時,它也會繼續插入每一行。

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

i = QTreeWidgetItem(self.treeWidget)追加新行,所以你追加一個用於數據,另一個窗口小部件,讓您交替行。 另外我不確定什麼

cw = QTreeWidget() 
cw.setColumnCount(len(col)) 

是。這似乎是一個新鮮的QTreeWidget,你只是丟棄。

[4][0]是我見過的最奇怪的寫作方式4

無論如何,這裏是你的主要爲循環固定:

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) 
+0

謝謝約瑟夫,其實我也剛回來,現在來,我發現我的錯誤,這是你提到的正是權。另外,寫「4」的奇怪方式僅僅是一些遺留在我測試一百種不同事物的工件上。在發佈它之前,你應該看到我的代碼,分配打印語句和灰色描述行。 :)再次感謝您的幫助和代碼! –

+0

你也許能夠告訴我如何能夠將該按鈕連接到一個動作。我會使用的是下面的代碼「button.clicked.connect(self.select_file)」,但我不確定我是否可以把它放在代碼的下方,或者如果我不得不把它放在我聲明的頂部我所有的變數。我試圖用self.button聲明頂部的按鈕,但是當我運行代碼時,它每次都會使python崩潰。 –

+1

要做按鈕的事情,我會去''button.clicked.connect(lambda rowItem = rowItem:self.button_clicked(rowItem))',並實現該button_clicked函數來做你想做的事情,因爲rowItem 。記住有很多按鈕,你需要把它們分開。 –