[英]Dynamic size of QTreeWidget in PyQt5
我有一个QTreewidget,我希望它尽可能小,可能只有一个分支。 但我希望尺寸根据其扩展或折叠方式而变化。 以及从适合小部件填充部分的大小开始。
我通过添加QTreeWidgetItems(使TreeWidget作为父级),然后再次使QTreeWidgetItems(使上述QTreeWidgetItem作为父级)来制作QTreewidget。
现在,它像左图一样开始,但是我希望它像右图一样开始。(这是您调整窗口大小时的最小尺寸。)
我如何在开始时将其调整为最小尺寸?
另外,我如何调整它的大小,比如说缩进的复选框消失(隐藏)时我重新调整它的大小,因此占用的空间更少。 现在,最小尺寸仍然是可见的。
奖励:当我更改样式时,最小尺寸变小,即使我不知道更改了什么,也使滚动条达到了最小尺寸,因为它仅在更改样式表时发生。
根据要求,这里是代码,这很混乱,因为它正在进行中。 这是我做树的班。
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
这只是放在上面图像中的小部件中。 该类接受一个字典,该字典具有名称/选项/工具提示的信息以及带有名称的列表,最后使这些复选框成为子复选框。 这完成了4次,因此有4个treewidgets。
另外,这是可以传递给类的字典,以使其得以实现。 虽然,并非全部使用。
optiondict={
"Active option": 1,
"Command": "",
"dependency": None,
"name": "Convert to audio",
"options": [
"mp3",
"aac",
"flac"
],
"state": True,
"tooltip": "Text here"
}
布局设置大小,它们通过小部件的sizeHint()
函数采用推荐值,但是此大小与您想要的大小不匹配。
就像您的情况一样,您只想减小窗口小部件的高度,我们必须使用minimumHeight()
设置最小高度,而必须通过sizeHint()
函数将其宽度设置为建议值。
self.resize(self.sizeHint().width(), self.minimumHeight())
例:
class Widget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setLayout(QVBoxLayout())
optiondict={
"Active option": 1,
"Command": "",
"dependency": None,
"name": "Convert to audio",
"options": [
"mp3",
"aac",
"flac"
],
"state": True,
"tooltip": "Text here"
}
for i in range(4):
w = paramTree(optiondict)
self.layout().addWidget(w)
self.resize(self.sizeHint().width(), self.minimumHeight())
我找到了一个解决这两个问题的解决方案(最小尺寸和动态尺寸更改)
这需要一些工作,其中一些是我在示例中所没有的简化代码。 但从本质上讲,我有一个功能可检查子复选框的排他性。 因此,我使用setData函数定义它是父复选框还是子复选框。 (子复选框)我敢肯定有一种更简单的方法,但是我是新来的...
使用排他性功能,我检查它是父母还是孩子。 如果是孩子,它将贯穿他们,并获得父母和孩子的数量。 然后,我只使用每个值并乘以父项/子项的大小。 然后从中设置高度。 如果父母双亲倒塌,则其身高不在计算尺寸之内。 然后,我只需在每个父项更改后重新计算大小即可。
这允许最小的尺寸,以及在扩展/折叠时动态调整大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.