pyqt 树节点拖拽 QTreeWidget

发布于:2024-05-18 ⋅ 阅读:(145) ⋅ 点赞:(0)

目录

pyqt 树节点拖拽 改变层级顺序

pyqt 树节点拖拽 QTreeWidget 实例


pyqt 树节点拖拽 改变层级顺序

pyqt 树节点拖拽 QTreeWidget 实例

import sys
from PyQt5 import QtWidgets, QtCore

class CustomTreeWidget(QtWidgets.QTreeWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setHeaderLabels(['Items'])
        self.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
        self.setDragEnabled(True)
        self.setAcceptDrops(True)
        self.setDropIndicatorShown(True)

    def dropEvent(self, event):
        super().dropEvent(event)
        self.print_tree_structure()

    def print_tree_structure(self):
        def recurse(item, level=0):
            print(' ' * level + item.text(0))
            for i in range(item.childCount()):
                recurse(item.child(i), level + 1)

        root = self.invisibleRootItem()
        for i in range(root.childCount()):
            child = root.child(i)
            recurse(child)

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('QTreeWidget Drag and Drop Example')
        self.setGeometry(300, 300, 400, 300)

        # 创建自定义的 QTreeWidget
        self.tree = CustomTreeWidget(self)
        self.setCentralWidget(self.tree)

        # 添加项目
        self.add_items()

    def add_items(self):
        root = QtWidgets.QTreeWidgetItem(self.tree, ['Root'])
        child1 = QtWidgets.QTreeWidgetItem(root, ['Child 1'])
        child2 = QtWidgets.QTreeWidgetItem(root, ['Child 2'])
        grandchild1 = QtWidgets.QTreeWidgetItem(child1, ['Grandchild 1'])

        # 展开所有节点
        self.tree.expandAll()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())


网站公告

今日签到

点亮在社区的每一天
去签到