PyQt5 QTreeWidget在布局中显示出一个额外的列在widget之外。

问题描述 投票:0回答:1

我正试图编写一个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_())

这就是我看到的

有什么办法能让它像第二张图那样显示出来吗? 从一个类中?

任何帮助都是非常感激的

python user-interface pyqt5 qtreewidget
1个回答
1
投票

这个错误很简单。你的窗口(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)
    
© www.soinside.com 2019 - 2024. All rights reserved.