您可以通过重写 QTreeWidget 的 collapseItem() 方法来实现在目录关闭时关闭所有下级中子项为0的目录。以下是一个示例代码:
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem
class CustomTreeWidget(QTreeWidget):
def __init__(self, parent=None):
super().__init__(parent)
def collapseItem(self, item: QTreeWidgetItem) -> None:
# 遍历当前节点的所有子节点
for i in range(item.childCount()):
child = item.child(i)
# 如果子节点为目录并且没有子项,则递归关闭它
if child.childCount() == 0 and child.flags() & Qt.ItemIsSelectable == False:
self.collapseItem(child)
# 调用父类方法关闭当前节点
super().collapseItem(item)
这里我们重写了 collapseItem() 方法,首先遍历当前节点的所有子节点,如果某个子节点为目录并且没有子项,则递归调用自身关闭该子节点。最后再调用父类方法关闭当前节点。
请注意,在上述代码中,我们假设您的目录仅包含两种类型的项目:文件和文件夹。在实际应用中,您可能需要根据您的数据模型进行一些调整。