python-pyqt5-如何查看信号是有传值以及指定传值方式

  1. 重写contextMenuEvent方法
  2. 设置将ContextMenuPolicy设置为Qt.CustomContextMenu使用 customContextMenuRequested 信号
# -*- coding: utf-8 -*-
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")
        # 必须将ContextMenuPolicy设置为Qt.CustomContextMenu
        # 否则无法使用customContextMenuRequested信号
        # ContextMenuPolicy 自定义菜单
        # NoContextMenu(禁止右键菜单)
        # DefaultContextMenu(默认菜单,等同于Qt::CustomContextMenu+Qt::ActionsContextMenu)
        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 = MenuRequested()
    mainwindow = MainWindow()
    mainwindow.show()
    sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值