QtPython QTreeWidget 问题
我正在做一个Qtreewidget,目的是为了满足客户的设计建议。我是在QtPython上编写这个代码的。最开始我用Qt Designer做了一个尝试,然后生成了代码。但是当我运行它的时候,出现了一个错误:
self.centralwidget.setSortingEnabled(__sortingEnabled)
AttributeError: setSortingEnabled
我在网上搜索了一下,但没有找到解决这个问题的方法,除了有些建议让我直接删除导致编译错误的代码行。但这样做并没有真正帮助,因为如果你这么做,就会引发更多的错误,就像这样:
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'
这是我目前用来生成一个简单漂亮的QtreeWidget/View的代码:
#//==========================//#
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)
#//==========================//#
我在Qt上用Designer和一点代码实现的其他对象,比如输入框、下拉框和选项卡控件,都运行得很好。现在我就是在这个TreeWidget的错误上卡住了。
任何提示或建议都非常感谢和欢迎。
2 个回答
0
这里是解决方法:
- 删除或注释掉以下这一行: self.centralwidget.setSortingEnabled(__sortingEnabled)
然后是代码:
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)
接下来是输出:
def eqpt_activateInput(self,item,col):
print "Qtree ok! pressed"
print item.text(col)
希望这对其他人也有帮助。 ThreaderSlash "at" gmail "dot" com
2
我猜你发的代码是你用pyuic4处理UI文件后得到的结果。我发现PyQt的UI编译器有时候会出问题。你能做的就是手动修正输出的代码,然后向开发者反映这个问题。
在你的例子中,这一行
self.centralwidget.setSortingEnabled(__sortingEnabled)
应该改成
self.colorTreeWidget.setSortingEnabled(__sortingEnabled)
我不明白为什么会出现AttributeError: 'NoneType' object has no attribute 'setText'
这个错误。因为在下面的代码中,你并没有引用self.treeWidget.topLevelItem(0)
。
由于这个UI看起来还不算太复杂,可能从头开始在QT Designer里重新做一遍会更好。尽量避免剪切和粘贴控件,以免让Designer和pyuic4搞混。祝你好运!