Pyqt5添加右键菜单
程序员文章站
2022-04-26 16:03:51
...
大家都知道左键事件信号是clicked, 但右键并不是rightClicked,而是customContextMenuRequested.
以初始化TreeView为例:
from PyQt5.QtWidgets import QTreeView, QBoxLayout, QMenu
from PyQt5.QtCore import Qt
from PyQt5.Qt import QStandardItemModel, QCursor
class FolderBar(QWidget):
def __init__(self):
super().__init__()
self.setMinimumSize(300, 600)
layout = QBoxLayout(QBoxLayout.TopToBottom)
self.tree_view = QTreeView()
self.tree_view.setModel(QStandardItemModel())
layout.addWidget(self.tree_view)
self.setLayout(layout)
self.tree_view.clicked.connect(...)
self.tree_view.setContextMenuPolicy(Qt.CustomContextMenu)
self.tree_view.customContextMenuRequested.connect(...)
要点就是先设置setContextMenuPolicy为Qt.CustomContextMenu, 然后就可以响应右键事件了。
customContextMenuRequested会给你提供的处理函数传递一个代表鼠标点击位置的QPoint对象。
比如可以这样显示出菜单:
def show_context_menu(self, pos):
menu = QMenu(self)
action = menu.addAction('add folder')
action.triggered.connect(...)
action = menu.addAction('rename')
action.triggered.connect(...)
action = menu.addAction('delete')
action.triggered.connect(...)
menu.exec_(QCursor.pos())
不执行menu.exec_菜单不会显示的。