QTreeView 用户通过界面在指定位置进行动态增加删除
时间: 2024-02-06 22:08:51 浏览: 190
TreeView动态添加,修改,删除能功能
4星 · 用户满意度95%
要实现在QTreeView中动态添加删除节点,可以使用QStandardItemModel作为QTreeView的数据模型。以下是示例代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeView, QStandardItemModel, QStandardItem, QAction
from PyQt5.QtCore import QModelIndex
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建TreeView和数据模型
self.tree_view = QTreeView()
self.model = QStandardItemModel()
self.tree_view.setModel(self.model)
# 添加根节点
root_item = QStandardItem('Root')
self.model.appendRow(root_item)
# 添加子节点
child_item = QStandardItem('Child')
root_item.appendRow(child_item)
# 添加菜单动作,用于添加和删除节点
add_action = QAction('Add', self)
add_action.triggered.connect(self.add_node)
remove_action = QAction('Remove', self)
remove_action.triggered.connect(self.remove_node)
# 添加菜单
menu = self.menuBar().addMenu('Node')
menu.addAction(add_action)
menu.addAction(remove_action)
# 设置主窗口布局
self.setCentralWidget(self.tree_view)
def add_node(self):
# 获取当前选中节点
selected_item = self.tree_view.selectedIndexes()[0].model().itemFromIndex(self.tree_view.selectedIndexes()[0])
# 创建新节点
new_item = QStandardItem('New Node')
# 将新节点添加到当前选中节点的父节点下
parent_item = selected_item.parent() if selected_item.parent() is not None else self.model.invisibleRootItem()
parent_item.appendRow(new_item)
def remove_node(self):
# 获取当前选中节点
selected_item = self.tree_view.selectedIndexes()[0].model().itemFromIndex(self.tree_view.selectedIndexes()[0])
# 删除当前选中节点
selected_item.parent().removeRow(selected_item.row())
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在上面的代码中,首先创建了一个QTreeView和一个QStandardItemModel,并将QStandardItemModel设置为QTreeView的数据模型。然后通过QStandardItemModel创建了一个根节点和一个子节点,并将子节点添加到根节点下。
接下来,通过QAction创建了两个菜单动作,分别用于添加和删除节点。将菜单动作添加到菜单栏中。
在添加节点的方法中,首先获取当前选中的节点,然后创建一个新节点。最后将新节点添加到当前选中节点的父节点下。
在删除节点的方法中,也是先获取当前选中的节点,然后通过父节点删除当前选中节点。
这样,就实现了在QTreeView中动态添加删除节点的功能。
阅读全文