QTreeWidget右键菜单
时间: 2023-11-22 08:54:48 浏览: 43
可以通过以下步骤为 `QTreeWidget` 添加右键菜单:
1. 创建右键菜单 `QMenu` 对象
```python
menu = QMenu(self)
```
2. 向菜单中添加菜单项 `QAction` 对象
```python
action = QAction("菜单项", self)
menu.addAction(action)
```
3. 连接菜单项的 `triggered` 信号到槽函数
```python
action.triggered.connect(self.on_menu_item_clicked)
```
4. 在 `QTreeWidget` 上注册右键菜单,并在鼠标右键按下事件中显示菜单
```python
def contextMenuEvent(self, event):
if self.itemAt(event.pos()) is not None:
menu.exec_(self.mapToGlobal(event.pos()))
```
完整代码示例:
```python
from PyQt5.QtWidgets import QWidget, QTreeWidget, QTreeWidgetItem, QMenu, QAction
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.tree_widget = QTreeWidget(self)
self.tree_widget.setHeaderLabels(["Name", "Value"])
# 添加根节点
root = QTreeWidgetItem(self.tree_widget, ["Root", ""])
# 添加子节点
child1 = QTreeWidgetItem(root, ["Child1", "Value1"])
child2 = QTreeWidgetItem(root, ["Child2", "Value2"])
# 注册右键菜单
self.tree_widget.setContextMenuPolicy(Qt.CustomContextMenu)
self.tree_widget.customContextMenuRequested.connect(self.show_context_menu)
def show_context_menu(self, pos):
item = self.tree_widget.itemAt(pos)
if item is not None:
menu = QMenu(self)
action = QAction("菜单项", self)
action.triggered.connect(self.on_menu_item_clicked)
menu.addAction(action)
menu.exec_(self.mapToGlobal(pos))
def on_menu_item_clicked(self):
print("菜单项被点击了")
```
在上述示例中,我们为 `QTreeWidget` 的根节点和子节点添加了右键菜单,并在菜单项被点击时打印一条消息。