2016-12-02 2 views
0

Ich habe den folgenden Code, wo ich Python und Qt verwenden, um ein UI zu machen, wo ich die Daten sehen kann, die in einer Tabelle ist. Funktioniert gut, aber ich versuche, eine Schaltfläche in die letzte Spalte einzufügen, die nur eine Spalte ist, die ich als "Platzhalter" für die Schaltfläche erstellt habe. (Ich verwende die Daten in dieser Spalte nicht)Python QTreewidget Button einfügen überspringt jede zweite Zeile

Aber mein Problem ist, dass ich den Knopf eingebe, aber nur in jede zweite Zeile. Es fügt jede zweite Zeile ein, auch wenn die Zeilen vom Tisch stehen geblieben sind.

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) 

ich kopiert und eingefügt den Code von überall her und habe hundert Dinge ausprobiert, und der Beste, was ich bekam, war eine Taste auf jeder Zeile zu erhalten, mit der Ausnahme der ersten Zeile.

Und das meiste der Literatur, die dieses Problem bespricht, ist in C#/C++ und ich habe keine Idee, wie man den Code in Python umwandelt und es versucht.

Bitte zeigen Sie mir mit Code, wenn möglich, wo ich falsch liege, oder wenn ich eine andere Klasse verwenden muss.

Grüße

Antwort

1

i = QTreeWidgetItem(self.treeWidget) anhängt eine neue Zeile, so dass man eine für die Daten angehängt, und ein weiteres für das Widget, Sie Zeilen abwechselnder geben. Auch ich bin nicht sicher, was

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

ist. Es scheint ein frisches QTreeWidget zu sein, das Sie einfach wegwerfen.

Und [4][0] ist die seltsamste Art zu schreiben 4, die ich gesehen habe.

Wie auch immer, hier ist Ihre Haupt-for-Schleife festgelegt:

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

Sie Joseph Danke, ich habe tatsächlich sind gerade jetzt nach rechts, dass ich meinen Fehler gefunden haben, das war genau das, was Sie genannt haben. Auch die seltsame Art, "4" zu schreiben, waren nur ein paar übriggebliebene Artefakte, die ich aus dem Testen von hundert verschiedenen Dingen hatte. Du hättest meinen Code sehen sollen, bevor ich ihn gepostet habe, und alle Druckanweisungen und ausgegrauten Textzeilen ausgegeben. :) Danke nochmal für die Hilfe und den Code! –

+0

Würdest du mir vielleicht auch sagen können, wie ich diesen Button mit einer Aktion verbinden könnte. Was ich verwenden würde ist der folgende Code "button.clicked.connect (self.select_file)" aber ich bin mir nicht sicher, ob ich es richtig unter den Code stellen kann, oder ob ich es an die Spitze setzen müsste, wo ich deklariere alle meine Variablen. Ich habe versucht, den Button oben mit self.button auch zu deklarieren, aber als ich den Code ausgeführt habe, ist Python jedes Mal abgestürzt. –

+1

Um etwas mit der Schaltfläche zu tun, würde ich etwas wie 'button.clicked.connect (lambda rowItem = rowItem: self.button_clicked (rowItem))' ', und implementieren Sie diese button_clicked Funktion zu tun, was Sie wollen, angesichts dieser RowItem . Denken Sie daran, dass es viele Knöpfe gibt und Sie sie auseinander halten müssen. –

Verwandte Themen