主要代碼
# 刪除控件樹子節點/根節點
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項和相應子項的一些操作