pyqt5:刪除樹控件(QTreeWidget)的子節點/根節點

主要代碼

    # 刪除控件樹子節點/根節點
    def deleteItem(self):
        try:
            # 嘗試刪除子節點(通過其父節點,調用removeChild函數進行刪除)
            currNode = self.tree.currentItem()
            parent1 = currNode.parent()
            parent1.removeChild(currNode)
        except Exception:
            # 遇到異常時刪除根節點
            try:
                rootIndex = self.tree.indexOfTopLevelItem(currNode)
                self.tree.takeTopLevelItem(rootIndex)
            except Exception:
                print(Exception)

完整程序代碼

from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys


class CollectionWindow(QMainWindow):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        # 設置窗口標題和大小
        self.setWindowTitle('樹控件')
        self.resize(380, 360)

        # 添加收藏夾,根節點的父是 QTreeWidget對象
        self.tree = QTreeWidget()
        self.tree.setColumnCount(1)
        self.tree.setHeaderLabels(['收藏夾'])  # 是表,則有表頭

        self.tree.clicked.connect(self.onClicked)
        self.f_item = self.tree.headerItem()

        # 添加一個初始文件夾
        child = QTreeWidgetItem(self.tree)
        child.setText(0, '目錄/跟節點')
        child.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsEditable)

        # 以下是窗口的設置
        self.setCentralWidget(self.tree)

        addAction = QAction("添加新子節點", self)
        addAction.triggered.connect(self.addItem)
        addAction2 = QAction("添加新目錄/根節點", self)
        addAction2.triggered.connect(self.addFolder)
        deleteAction = QAction("刪除", self)
        deleteAction.triggered.connect(self.deleteItem)

        toolbar = self.addToolBar("")
        toolbar.addAction(addAction)
        toolbar.addAction(addAction2)
        toolbar.addAction(deleteAction)
        self.show()

    # 添加樹控件子節點
    def addItem(self):
        currNode = self.tree.currentItem()
        addChild = QTreeWidgetItem()
        addChild.setText(0, "新子節點")
        currNode.addChild(addChild)

    # 添加根節點
    def addFolder(self):
        child = QTreeWidgetItem(self.tree)
        child.setText(0, '新目錄/根節點')
        child.setFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsEditable)

    # 刪除控件樹子節點/根節點
    def deleteItem(self):
        try:
            # 嘗試刪除子節點(通過其父節點,調用removeChild函數進行刪除)
            currNode = self.tree.currentItem()
            parent1 = currNode.parent()
            parent1.removeChild(currNode)
        except Exception:
            # 遇到異常時刪除根節點
            try:
                rootIndex = self.tree.indexOfTopLevelItem(currNode)
                self.tree.takeTopLevelItem(rootIndex)
            except Exception:
                print(Exception)

    def onClicked(self):
        # 將之前選中的子項目背景色還原
        self.f_item.setBackground(0, QColor(255, 255, 255))
        # 獲取當前選中項
        item = self.tree.currentItem()
        # 設置當前選擇項背景
        item.setBackground(0, QColor('#AFEEEE'))
        # 更新前選中項
        self.f_item = item


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

運行效果

參考

pyqt QTreeWidget關於Root項和相應子項的一些操作 

發佈了66 篇原創文章 · 獲贊 50 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章