PyQt5中QTreeWidget的动态大小

2024-10-01 09:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QTreewidget,我希望它尽可能小,可能只有一个分支。但我希望它的大小随着它的膨胀或收缩而变化。也可以从适合小部件填充部分的尺寸开始。在

我通过添加QTreeWidgetItems来创建QTreeWidgetItems,它将TreeWidget作为父级,然后再次创建QTreeWidgetItems,它将上面的QTreeWidgetItem作为父级。在

现在,它像左图像一样开始,但是我希望它像右图像一样开始(这是当您调整窗口大小时的最小大小)

UnwantedWanted

  • 如何使它在开始时调整到最小大小?

  • 另外,我如何调整它的大小,比如说当缩进的复选框消失(隐藏)时,我调整它的大小,这样占用的空间就更少了。现在,最小尺寸仍然是它的大小,当那些是可见的。

  • 好处:当我改变样式时,最小尺寸变小了,使我得到了最小尺寸的滚动条,尽管我不知道我改变了什么,因为只有当我更改样式表时才会发生这种情况。

按要求,这是代码,这是一大堆乱七八糟的东西,因为它只是在进行中的工作。这是我做树的课。在

class paramTree(QTreeWidget):
    def __init__(self, Options: dict):
        super().__init__()
        self.setExpandsOnDoubleClick(False)
        self.setHeaderHidden(True)
        self.setRootIsDecorated(False)

        self.Main = self.makeOption(Options['name'], self, Options['state'],0,Options['tooltip'])

        self.Options=[]
        if Options['options'] is not None:
            print(Options['options'])
            for number, choice in enumerate(Options['options']):
                if Options['Active option'] == number:
                    sub = self.makeOption(choice, self.Main,True,1)
                    sub.setFlags(sub.flags() ^ Qt.ItemIsUserCheckable)
                else:
                    sub = self.makeOption(choice, self.Main,False,1)
                self.Options.append(self.indexFromItem(sub))

    def makeOption(name, parent, checkstate, level=0, tooltip=None):
        mainItem = QTreeWidgetItem(parent,[name])
        if tooltip:
            mainItem.setToolTip(0,tooltip)
        if checkstate:
            mainItem.setCheckState(0, Qt.Checked)
        else:
            mainItem.setCheckState(0, Qt.Unchecked)
        mainItem.setExpanded(True)

        return mainItem

这只是放在上面图片中的一个小部件中。该类接受dict,其中包含name/options/tooltip的信息和一个带有名称的列表,最后生成子复选框。这是4次,所以4个树篱。在

另外,这里有一个可以传给全班的口述。不过,并不是所有的都被使用了。在

^{pr2}$

Tags: nameselffalsetrueifmain尺寸qt
2条回答

布局设置大小,它们通过小部件的sizeHint()函数获取推荐值,但是这个大小与您想要的不匹配。在

在您的例子中,您只想降低小部件的高度,我们必须使用minimumHeight()设置最小高度,而不是使用函数sizeHint()的推荐值来设置宽度。在

self.resize(self.sizeHint().width(), self.minimumHeight())

示例:

^{pr2}$

enter image description here

我找到了一个解决这两个问题的解决方案(最小可能的大小和动态大小更改)

它需要做一些工作,其中一些被排除在示例中的简化代码中。但本质上,我有一个函数,它检查子复选框的独占性。所以我使用setData函数来定义它是父复选框还是子复选框。(subcheckbox)我相信有更简单的方法,但我是新手。。。在

使用exclusive函数,我检查它是父对象还是子对象。如果它是一个孩子,它会穿过它们,得到父母和孩子的数量。然后使用每个值乘以父/子项的大小。然后设定高度。如果父对象塌陷,则其子对象不包括在大小计算中。然后我只需在每个父项更改后重新计算大小。在

这允许尽可能小的大小,以及在展开/折叠时动态调整大小。在

相关问题 更多 >