如何在QTreewidget中设置open/close个图标

How to set open/close icons in QTreewidget

如何在 QTreeWidget 中管理打开和关闭的图标事件?

我有这个代码:

iconNameOpen="folder"
iconNameClose="folder_orange_open"

if ID>0:#file
    iconNameFile="file_important"
    icon=QIcon(':/manageinc/svg/reinhardticons/filesystems/{}.svg'.format(iconNameFile))
    item.setIcon(0,icon)
else:
    icon=QIcon(':/manageinc/svg/reinhardticons/filesystems/{}.svg'.format(iconNameOpen))
    item.setIcon(0,icon)
    #how manage when only this folder is opened or close?

如果我制作样式表,我会使用相同的 属性) 查看文件和文件夹(ID>0 或 <0)。

您可以使用 itemExpanded and itemCollapsed 信号来更改图标。下面的演示脚本使用 QStyle 创建图标,但您可以按照自己喜欢的方式进行操作:

import sys
from PyQt5.QtWidgets import *

class Window(QTreeWidget):
    def __init__(self):
        super().__init__()
        style = QApplication.style()
        self.dir_open = style.standardIcon(QStyle.SP_DirOpenIcon)
        self.dir_closed = style.standardIcon(QStyle.SP_DirClosedIcon)
        self.file_all = style.standardIcon(QStyle.SP_FileIcon)
        for index in '1234':
            parent = QTreeWidgetItem(self, ['Dir' + index])
            parent.setIcon(0, self.dir_closed)
            for item in 'ABC':
                child = QTreeWidgetItem(parent, ['File' + index + item])
                child.setIcon(0, self.file_all)
        self.itemExpanded.connect(self.handleExpanded)
        self.itemCollapsed.connect(self.handleCollapsed)

    def handleExpanded(self, item):
        item.setIcon(0, self.dir_open)

    def handleCollapsed(self, item):
        item.setIcon(0, self.dir_closed)

if __name__ == "__main__":

    app = QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 50, 400, 300)
    window.show()
    sys.exit(app.exec_())