函数名 | 功能 |
---|---|
QTreeWidget | 创建一个树控件 |
setHeaderLabels | 设置行标签 |
QTreeWidgetItem(parent) | 创建树的子节点, parent:父节点 |
setText(self, p_int, p_str) | p_int:列号 |
p_str: 文本 | |
setIcon | 设置子节点图标 |
setColumnWidth | 设置列宽 |
setCheckState | 设置复选框 |
expandAll | 设置是否为展开状态 |
currentItem | 获得当前点击的树节点对象 |
text | 获得节点中的文本 |
selectedItems | 获得节点的所有对象,返回一个列表 |
import sys
from PyQt5.QtWidgets import *
class ModifyTree(QWidget):
def __init__(self):
super(ModifyTree, self).__init__()
self.setWindowTitle("TreeWidget 例子")
layout = QHBoxLayout()
Buton1 = QPushButton("添加节点")
Buton2 = QPushButton("修改节点")
Buton3 = QPushButton("删除节点")
layout.addWidget(Buton1)
layout.addWidget(Buton2)
layout.addWidget(Buton3)
Buton1.clicked.connect(self.addNode)
Buton2.clicked.connect(self.updateNode)
Buton3.clicked.connect(self.deleteNode)
self.tree = QTreeWidget()
self.tree.setColumnCount(2)
self.tree.setHeaderLabels(['Key', 'Value'])
root = QTreeWidgetItem(self.tree)
root.setText(0, 'root')
root.setText(1, '0')
child1 = QTreeWidgetItem(root)
child1.setText(0, 'child1')
child1.setText(1, '1')
child2 = QTreeWidgetItem(root)
child2.setText(0, 'child2')
child2.setText(1, '2')
child3 = QTreeWidgetItem(child2)
child3.setText(0, 'child3')
child3.setText(1, '3')
# 设置单击信号
self.tree.clicked.connect(self.onTreeClicked)
mainLayout = QVBoxLayout(self)
mainLayout.addLayout(layout)
mainLayout.addWidget(self.tree)
self.setLayout(layout)
# 设置单击事件
def onTreeClicked(self):
# 获得当前点击的项
item = self.tree.currentItem()
print("key: %s , value: %s" % (item.text(0), item.text(1)))
# 添加节点
def addNode(self):
item = self.tree.currentItem()
node = QTreeWidgetItem(item)
node.setText(0, '新节点')
node.setText(1, '数据')
# 修改节点
def updateNode(self):
item = self.tree.currentItem()
item.setText(0, '修改节点')
item.setText(1, '修改的值')
# 删除节点
def deleteNode(self):
# 选中要删除的节点
item = self.tree.currentItem()
# 获得根节点的父节点,防止删不掉根节点
root = self.tree.invisibleRootItem()
# 得到所有的节点
for item in self.tree.selectedItems():
(item.parent() or root).removeChild(item)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = ModifyTree()
main.show()
sys.exit(app.exec_())
效果如图