pyside6 -qtreewidget-构建的动态项目

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


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")

Like mock up image这归结为从列表项目中构造树结构,然后动态地将它们添加到QTreeWidget

为此,您可以首先循环列表,然后在字符串中找到
.
python-3.x pyqt pyside6 pyqt6
1个回答
0
投票
注意,在下面的代码中,我添加了一个try-except块,以防列表项目中没有

.

,然后整个项目将变为顶部类别,子类别为空。
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()

恢复:


    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.