欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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_菜单不会显示的。

相关标签: PyQt5 pyqt