[英]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.