apple_item = QtWidgets.QTreeWidgetItem(self.list)
apple_item.setText(0, "apple")
apple_item.setFont(0, self.TOP_LEVEL_TREE_ITEM_FONT)
apple_green_item = QtWidgets.QTreeWidgetItem(apple_item)
apple_green_item.setText(0, "green")
apple_red_item = QtWidgets.QTreeWidgetItem(apple_item)
apple_red_item.setText(0, "red")
banana_item = QtWidgets.QTreeWidgetItem(self.list)
banana_item.setText(0, "banana")
banana_item.setFont(0, self.TOP_LEVEL_TREE_ITEM_FONT)
banana_green_item = QtWidgets.QTreeWidgetItem(banana_item)
banana_green_item.setText(0, "green")
banana_yellow_item = QtWidgets.QTreeWidgetItem(banana_item)
banana_yellow_item.setText(0, "yellow")
pear_item = QtWidgets.QTreeWidgetItem(self.list)
pear_item.setFont(0, self.TOP_LEVEL_TREE_ITEM_FONT)
pear_item.setText(0, "pear")
pear_green_item = QtWidgets.QTreeWidgetItem(pear_item)
pear_green_item.setText(0, "green")
这归结为从列表项目中构造树结构,然后动态地将它们添加到
QTreeWidget
为此,您可以首先循环列表,然后在字符串中找到
.
.
,然后整个项目将变为顶部类别,子类别为空。 this this the the the the以下词典:
{'pear': ['green'], 'banana': ['yellow', 'green'], 'apple': ['green', 'red'], 'peach': []}
后,您可以在此词典上进行第二个循环。在下面的代码中,循环的键上的键在树小部件中按字母顺序排列的键。现在,您可以为每个顶部类别创建一个动态项目,并为子类别列表(可以是空的,例如示例中的PEACH)。添加项目和子项目的方式与模型中的方式相同,但只需在循环中使用相同的变量
item
和
subitem
。
Full代码:
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel, QTreeWidget, QTreeWidgetItem
class TreeWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
treeWidget = QTreeWidget(self)
treeWidget.setColumnCount(2)
treeWidget.setHeaderHidden(True)
mylist = ['pear.green', 'banana.yellow', 'banana.green', 'apple.green', 'apple.red', 'peach']
categories = dict()
for item in mylist:
try:
pos = item.index(".")
topcat = item[:pos]
subcat = [item[pos+1:]]
except:
topcat = item
subcat = []
if topcat in categories:
categories[topcat].extend(subcat)
else:
categories[topcat] = subcat
for topcat in sorted(categories):
item = QTreeWidgetItem(treeWidget)
item.setText(0, topcat)
for subcat in categories[topcat]:
subitem = QTreeWidgetItem(item)
subitem.setText(0, subcat)
self.setCentralWidget(treeWidget)
app = QApplication([])
mainWin = TreeWindow()
mainWin.show()
app.exec()
恢复: