- 重写contextMenuEvent方法
- 设置将ContextMenuPolicy设置为Qt.CustomContextMenu使用 customContextMenuRequested 信号
import sys
from PyQt5.Qt import *
"""
重写contextMenuEvent
"""
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 300, 200)
self.setWindowTitle("Right Click Menu Example")
def contextMenuEvent(self, event):
menu = QMenu(self)
sub_menu = QMenu("sub_menu", self)
sub_menu.addAction(QAction('sub', self))
action_copy = QAction('Copy', self)
action_cut = QAction('Cut', self)
action_paste = QAction('Paste', self)
menu.addAction(action_copy)
menu.addAction(action_cut)
menu.addAction(action_paste)
menu.addMenu(sub_menu)
menu.triggered.connect(lambda action: print(f"trigger {action.text()}"))
menu.exec_(QCursor.pos())
"""
自定义菜单使用 customContextMenuRequested 信号
"""
class MenuRequested(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 300, 200)
self.setWindowTitle("Right Click Menu Example")
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.create_menu()
self.customContextMenuRequested.connect(self.showContextMenu)
def create_menu(self):
menu = QMenu(self)
action_copy = QAction('Copy', self)
action_cut = QAction('Cut', self)
action_paste = QAction('Paste', self)
menu.addAction(action_copy)
menu.addAction(action_cut)
menu.addAction(action_paste)
menu.triggered.connect(lambda action: print(f"trigger {action.text()}"))
self.menu = menu
def showContextMenu(self):
self.menu.show()
self.menu.exec_(QCursor.pos())
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())