pyqt5 qtreewidget 只为根节点添加右键菜单
时间: 2023-10-10 20:07:39 浏览: 122
树形控件添加右键菜单
你可以通过以下代码实现:
```python
from PyQt5.QtWidgets import QMenu, QTreeWidgetItem, QTreeWidget, QApplication
from PyQt5.QtCore import Qt
class MyTreeWidget(QTreeWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setHeaderLabels(['Name', 'Age'])
root = QTreeWidgetItem(self)
root.setText(0, 'Root')
root.setText(1, '30')
child1 = QTreeWidgetItem(root)
child1.setText(0, 'Child1')
child1.setText(1, '20')
child2 = QTreeWidgetItem(root)
child2.setText(0, 'Child2')
child2.setText(1, '25')
self.addTopLevelItem(root)
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.show_context_menu)
def show_context_menu(self, pos):
item = self.itemAt(pos)
if not item.parent():
menu = QMenu()
action = menu.addAction('Add Child')
action.triggered.connect(self.add_child)
menu.exec_(self.mapToGlobal(pos))
def add_child(self):
item = self.currentItem()
child = QTreeWidgetItem(item)
child.setText(0, 'New Child')
child.setText(1, '0')
item.addChild(child)
if __name__ == '__main__':
app = QApplication([])
tree = MyTreeWidget()
tree.show()
app.exec_()
```
在这个例子中,我们创建了一个继承自 QTreeWidget 的类 MyTreeWidget。在类的初始化函数中,我们添加了一个根节点和两个子节点,并将其添加到树中。我们通过设置 setContextMenuPolicy() 方法为树添加了右键菜单,然后在 customContextMenuRequested 信号的槽函数中根据鼠标点击的位置获取到当前的节点,判断该节点是否为根节点,如果是则弹出菜单。菜单中添加了一个 'Add Child' 的动作,在其槽函数中添加了一个新的子节点,并将其添加到当前节点中。需要注意的是,我们在添加菜单时只为根节点添加了菜单,因为其他节点没有该菜单的需求。
你可以根据需要修改菜单的内容和槽函数的实现。
阅读全文