2009-11-17 6 views
1

J'ai un QTreewidget qui fonctionne très bien si je n'ai qu'un seul niveau sur ma liste des arbres. Si je décide d'ajouter des sous-niveaux enfants, cela me donne une erreur. Voici le code, qui fonctionne bien sans les lignes "childs" (voir après "child 1" et "child 2").Qt Python: Problème QTreeWidget enfant

def eqpt_centralwdg(self,MainWindow): 
    self.centralwidget = QtGui.QWidget(MainWindow) 
    self.centralwidget.setObjectName("centralwidget") 

    self.colorTreeWidget = QtGui.QTreeWidget(self.centralwidget) 
    self.colorTreeWidget.setGeometry(QtCore.QRect(60, 60, 191, 141)) 
    self.colorTreeWidget.setObjectName("colorTreeWidget") 

    # father root 1 
    item = QtGui.QTreeWidgetItem(self.colorTreeWidget) 
    #child 1 - from father 1 
    item = QtGui.QTreeWidgetItem(item) 
    #child 2 - from father 1 
    item = QtGui.QTreeWidgetItem(item) 
    # father root 2 
    item = QtGui.QTreeWidgetItem(self.colorTreeWidget)   

    self.connect(self.colorTreeWidget, QtCore.SIGNAL('itemClicked(QTreeWidgetItem*, int)'), self.eqpt_activateInput) 

    MainWindow.setCentralWidget(self.centralwidget) 

def eqpt_retranslateUi(self, MainWindow): 
    MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8) 
    self.colorTreeWidget.headerItem().setText(0, QtGui.QApplication.translate("MainWindow", "color", None, QtGui.QApplication.UnicodeUTF8) 
    __sortingEnabled = self.colorTreeWidget.isSortingEnabled()  
    self.colorTreeWidget.setSortingEnabled(False) 
    # father root 1 
    self.colorTreeWidget.topLevelItem(0).setText(0, QtGui.QApplication.translate("MainWindow", "Yellow", None, QtGui.QApplication.UnicodeUTF8) 
    #child 1 - from father 1 
    self.colorTreeWidget.topLevelItem(0).child(0).setText(0, QtGui.QApplication.translate("MainWindow", "Yellow Sun", None, QtGui.QApplication.UnicodeUTF8)) 
    #child 2 - from father 1 
    self.colorTreeWidget.topLevelItem(0).child(1).setText(0, QtGui.QApplication.translate("MainWindow", "Yellow Gold", None, QtGui.QApplication.UnicodeUTF8))   

    # father root 2 
    self.colorTreeWidget.topLevelItem(1).setText(0, QtGui.QApplication.translate("MainWindow", "Blue", None, QtGui.QApplication.UnicodeUTF8) 

    self.colorTreeWidget.setSortingEnabled(__sortingEnabled) 

Voici la sortie, quand il fonctionne

def eqpt_activateInput(self,item,col): 
    print "Qtree ok! pressed" 
    print item.text(col) 

si j'Excluez les lignes liées à l ' « enfant 1 » et « enfant 2 » à partir du code, il fonctionne. Dans le cas contraire, il me donne l'erreur:

AttributeError: 'NoneType' object has no attribute 'setText' 

J'utilise Qt Designer pour générer le code, et ajouté quelques lignes pour déclencher des événements.

Tous les conseils ou suggestions sont très appréciés.

Répondre

0

Résolu! Voici la solution:

parent1 = QtGui.QTreeWidgetItem(self.colorTreeWidget) 
    child1_1 = QtGui.QTreeWidgetItem() 
    child1_2 = QtGui.QTreeWidgetItem() 
    parent1.addChild(child1_1) 
    parent1.addChild(child1_2) 

Maintenant, cela fonctionne correctement.

Merci encore pour vos suggestions et commentaires!

5

Vos nœuds d'arbres ressemblent à ceci:

Node 1 
    Node 1.1 
     Node 1.1.1 
Node 2 

(pardonnez-moi pour la mauvaise présentation)

Dans votre code vous accédez à la première deuxième enfant de noeud de niveau supérieur:

#child 2 - from father 1 
self.colorTreeWidget.topLevelItem(0).child(1)... 

mais il n'existe pas, puisque vous avez (par erreur) ajouté l'enfant pour le mauvais noeud.

En général, je ne construisez votre arbre de cette façon, vous pouvez voir comment confus il obtient, alors que ceci:

parent = QtGui.QTreeWidgetItem(self.colorTreeWidget) 
firstchild = QtGui.QTreeWidgetItem(parent) 
secondchild = QtGui.QTreeWidgetItem(parent) 
parent = QtGui.QTreeWidgetItem(self.colorTreeWidget) 

avec des noms uniques pour chaque nœud est beaucoup plus clair.

Ou encore ceci:

parent = QtGui.QTreeWidgetItem(self.colorTreeWidget) 
parent.addChild(...) 
parent.addChild(...) 
+0

Bonjour Daniel. Merci pour vos commentaires. Cela a aidé à corriger l'erreur. – ThreaderSlash