2009-11-16 5 views
0

J'essaie de faire un QtreeWidget pour assister à une suggestion de conception de client. Je le code sur QtPython. J'ai fait un premier essai en utilisant Qt Designer, puis j'ai généré le code. Mais lorsque je tente de l'exécuter, une erreur sort:QtPython Qtreewidget Problème

self.centralwidget.setSortingEnabled(__sortingEnabled) 
AttributeError: setSortingEnabled 

Je googlé autour, mais n'a pas trouvé de solution à ce problème, à l'exception une suggestion tout simplement supprimer les lignes dans le code qui en résulte l'erreur de compilation. Mais il n'a pas aidé vraiment, parce que si vous le faites, il déclenche plus d'erreur, comme ça:

self.treeWidget.topLevelItem(0).child(1).setText(0, QtGui.QApplication.translate("MainWindow", "Item Name", None, QtGui.QApplication.UnicodeUTF8)) 
AttributeError: 'NoneType' object has no attribute 'setText' 

Voici mon code actuel pour générer un QTreeWidget simple et agréable/Vue:

#//==========================//# 
def color_setupUi(self, MainWindow,phrase): 
MainWindow.setObjectName("MainWindow") 
MainWindow.resize(800, 600) 
self.eqpt_centralwdg(MainWindow) 
self.eqpt_retranslateUi(MainWindow) 
QtCore.QMetaObject.connectSlotsByName(MainWindow) 
#//==========================//# 
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") 

item = QtGui.QTreeWidgetItem(self.colorTreeWidget) 
item = QtGui.QTreeWidgetItem(self.colorTreeWidget) 

self.centralwidget.setSortingEnabled(__sortingEnabled) 
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) 
self.colorTreeWidget.topLevelItem(0).setText(0, QtGui.QApplication.translate("MainWindow", "Yellow", None, QtGui.QApplication.UnicodeUTF8) 
self.colorTreeWidget.topLevelItem(1).setText(0, QtGui.QApplication.translate("MainWindow", "Blue", None, QtGui.QApplication.UnicodeUTF8) 
self.colorTreeWidget.setSortingEnabled(__sortingEnabled) 
#//==========================//# 

Tous les autres objets que j'avais besoin de mettre en œuvre sur Qt en utilisant Designer et un peu de code a bien fonctionné jusqu'à présent, par exemple inputLine, comboBox, TabWidget. Je suis juste coincé avec cette erreur TreeWidget.

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

+0

Vous devez rééditer ceci pour que le code soit correctement formaté. C'est difficile à lire comme ça. Pour ce faire indent chaque ligne de code de 4 espaces. – quark

Répondre

2

Je suppose que le code que vous avez publié est ce que vous avez obtenu lorsque vous avez exécuté votre fichier d'interface utilisateur via pyuic4. J'ai trouvé le compilateur PyQt UI parfois bogué. Tout ce que vous pouvez faire est de corriger la sortie manuellement et de vous plaindre au vendeur.

Dans votre cas, la ligne

self.centralwidget.setSortingEnabled(__sortingEnabled) 

devrait lire

self.colorTreeWidget.setSortingEnabled(__sortingEnabled) 

Je ne comprends pas où le AttributeError: 'NoneType' object has no attribute 'setText' vient. Vous ne référencez pas self.treeWidget.topLevelItem(0) dans le code ci-dessous.

Étant donné que l'interface utilisateur ne semble pas encore trop complexe, il peut être utile de recommencer à zéro dans QT Designer. Essayez d'éviter de couper et coller des contrôles, afin de ne pas confondre le Designer/pyuic4. Bonne chance!

+0

Merci pour votre suggestion. Maintenant, cela fonctionne - voir dans la séquence la solution. – ThreaderSlash

0

Voici la solution:

  1. suppression/commentaire que la ligne suivante: self.centralwidget.setSortingEnabled (__ sortingEnabled)

Puis code:

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") 

    item = QtGui.QTreeWidgetItem(self.colorTreeWidget) 
    item = QtGui.QTreeWidgetItem(self.colorTreeWidget)   

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

    MainWindow.setCentralWidget(self.centralwidget) 

et la sortie

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

Espérons que cela puisse aider les autres aussi. ThreaderSlash "at" gmail "dot" com