我正试图编写一个PyQt5 widget,它将成为一个应用程序中的基本预设管理器,我试图使用QTreeWidget来显示每个类型的结构。我试图使用QTreeWidget来显示每个类型的结构。我遇到了一个奇怪的问题,我看到一个额外的QTreeWidget,在我的QTreeWidget外面有一个名为 "1 "的列。我附上了一张图片(抱歉,我不能截图)和代码。我还注意到,如果我不使用类,这种情况就不会发生。
这是我的测试代码,显示了这个问题。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyTree(QtWidgets.QTreeWidget):
def __init__(self, parent = None):
super(self.__class__, self).__init__(parent)
boxLayout = QtWidgets.QVBoxLayout()
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(['Preset Name'])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
boxLayout.addWidget(treeWidget)
self.setLayout(boxLayout)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MyTree()
w.show()
sys.exit(app.exec_())
这就是我所看到的
我最好的猜测是布局的问题 因为如果我像这样创建QTreeWidget:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
app = QtWidgets.QApplication(sys.argv)
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(['Preset Name'])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
treeWidget.show()
sys.exit(app.exec_())
这就是我看到的
有什么办法能让它像第二张图那样显示出来吗? 从一个类中?
任何帮助都是非常感激的
这个错误很简单。你的窗口(MyTree)是一个空的QTreeWidget,里面有另一个QTreeWidget,所以 "1 "属于空的QTreeWidget。
有2种可能的解决方案。
没有用户作为QTreeWidget的基类
class MyTree(QtWidgets.QWidget):
def __init__(self, parent=None):
super(self.__class__, self).__init__(parent)
treeWidget = QtWidgets.QTreeWidget()
treeWidget.setHeaderLabels(["Preset Name"])
treeWidget.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
treeWidget.insertTopLevelItems(0, items)
boxLayout = QtWidgets.QVBoxLayout(self)
boxLayout.addWidget(treeWidget)
不要嵌套一个新的QTreeWidget。
class MyTree(QtWidgets.QTreeWidget):
def __init__(self, parent=None):
super(self.__class__, self).__init__(parent)
self.setHeaderLabels(["Preset Name"])
self.setColumnCount(1)
items = []
for i in range(10):
items.append(QtWidgets.QTreeWidgetItem(["item {0}".format(i)]))
self.insertTopLevelItems(0, items)