QtPython QTreeWidget 问题

0 投票
2 回答
2644 浏览
提问于 2025-04-15 16:05

我正在做一个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

这里是解决方法:

  1. 删除或注释掉以下这一行: 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搞混。祝你好运!

撰写回答