前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PySide6 GUI 编程(33):重载右键上下文菜单 contextMenuEvent

PySide6 GUI 编程(33):重载右键上下文菜单 contextMenuEvent

原创
作者头像
bowenerchen
修改于 2024-08-23 12:33:52
修改于 2024-08-23 12:33:52
25800
代码可运行
举报
文章被收录于专栏:编码视界编码视界
运行总次数:0
代码可运行

示例代码

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from __future__ import annotations

import sys
from datetime import datetime

from PySide6.QtGui import QAction, QContextMenuEvent
from PySide6.QtWidgets import QApplication, QMainWindow, QMenu


class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("ContextMenu Demo")
        self.action_button_1 = QAction("按钮1", self)
        self.action_button_2 = QAction("按钮2", self)
        self.action_button_1.triggered.connect(self.action_button_triggered)
        self.action_button_2.triggered.connect(self.action_button_triggered)

    def contextMenuEvent(self, event: QContextMenuEvent):
        """
        QMainWindow 的 contextMenuEvent(QContextMenuEvent *) 是一个事件处理器
        它在用户请求上下文菜单时被触发
        默认情况下,这通常发生在用户右键点击窗口的非客户区域(non-client area)时例如标题栏、边框或状态栏
        在某些操作系统或窗口管理器中,也可能在点击特定的客户区域(client area)时触发,这取决于系统的行为和用户的设置
        contextMenuEvent 事件处理器接收一个 QContextMenuEvent 对象作为参数
        该对象包含了触发上下文菜单事件的相关信息,例如位置和原因
        """
        context = QMenu()
        context.addAction(self.action_button_1)
        context.addAction(self.action_button_2)
        context.exec(event.globalPos())
        print(f'坐标:{event.globalPos().toTuple()},'
              f'设备名称:{event.device().name()},'
              f'设备类型:{event.deviceType()},'
              f'事件类型:{event.type()},'
              f'事件来源:{event.reason()}')

    def action_button_triggered(self):
        action_button = self.sender()
        if action_button:
            print(action_button.text(), datetime.now().isoformat())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    sys.exit(app.exec())

运行效果

右键菜单
右键菜单

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验