python之PyQt按钮右键菜单功能的实现代码

示例一

我们可以创建一个简单的窗口,然后在窗口中添加一个自定义按钮。 当鼠标右键点击按钮时,弹出菜单,并在菜单中选中某个选项后弹出消息框。

完整代码如下所示:

# 导入PyQt库
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction
from PyQt5.QtCore import QPoint# 自定义按钮
class MyButton(QMainWindow):def __init__(self):super().__init__()# 设置按钮self.btn = QPushButton('自定义按钮',self)self.btn.resize(100,50)self.btn.move(50,50)# 连接右键菜单self.btn.setContextMenuPolicy(Qt.CustomContextMenu)self.btn.customContextMenuRequested.connect(self.showContextMenu)# 创建右键菜单def showContextMenu(self, pos):menu = QMenu(self)menu.addAction(QAction('选项1', self))menu.addAction(QAction('选项2', self))# 菜单事件处理action = menu.exec_(self.btn.mapToGlobal(pos))if action:QMessageBox.information(self, "菜单", "你选择了{}".format(action.text()))if __name__ == '__main__':# 创建应用程序app = QApplication(sys.argv)# 创建主窗口mainWindow = QMainWindow()btn = MyButton()# 设置窗口标题mainWindow.setWindowTitle('程序主窗口')# 显示窗口mainWindow.show()sys.exit(app.exec_())

示例二

我们可以在窗口中添加多个自定义按钮,每个按钮都有自己的右键菜单,并在选中菜单选项后弹出消息框。

完整代码如下所示:

# 导入PyQt库
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction
from PyQt5.QtCore import QPoint# 自定义按钮
class MyButton(QMainWindow):def __init__(self, text, x, y):super().__init__()# 设置按钮self.btn = QPushButton(text, self)self.btn.resize(100,50)self.btn.move(x,y)# 连接右键菜单self.btn.setContextMenuPolicy(Qt.CustomContextMenu)self.btn.customContextMenuRequested.connect(self.showContextMenu)# 创建右键菜单def showContextMenu(self, pos):menu = QMenu(self)menu.addAction(QAction('选项1', self))menu.addAction(QAction('选项2', self))# 菜单事件处理action = menu.exec_(self.btn.mapToGlobal(pos))if action:QMessageBox.information(self, "菜单", "你选择了{}".format(action.text()))if __name__ == '__main__':# 创建应用程序app = QApplication(sys.argv)# 创建主窗口mainWindow = QMainWindow()# 创建自定义按钮btn1 = MyButton('按钮1', 50, 50)btn2 = MyButton('按钮2', 200, 50)btn3 = MyButton('按钮3', 50, 150)btn4 = MyButton('按钮4', 200, 150)# 设置窗口标题mainWindow.setWindowTitle('程序主窗口')# 显示窗口mainWindow.show()sys.exit(app.exec_())

以上就是Python之PyQt按钮右键菜单功能的实现代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

latex伪代码书写进阶(2)

algorithm2e 是一个 LaTeX 宏包,用于在文档中编写算法和伪代码。以下是 algorithm2e 常见的语法和使用方式的示例: 引入 algorithm2e 宏包: \usepackage{algorithm2e}设置算法标题和标签: \begin{algorithm}[h]\caption{Algori…

nodejs+vue+elementui养老院老年人服务系统er809

“养老智慧服务平台”是运用nodejs语言和vue框架,以MySQL数据库为基础而发出来的。为保证我国经济的持续性发展,必须要让互联网信息时代在我国日益壮大,蓬勃发展。伴随着信息社会的飞速发展,养老智慧服务平台所面临的问题也一个接…

C语言水平测试题 过关斩将(3)辗转相除法,前n项求和,整数的正序分解,求最大公约数

我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位 👍点赞 ⭐收藏 📝评论 我的专栏:C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客(这…

前后端开发环境下载,java web前后端分离项目所有环境下载

前言介绍 配置环境过程枯燥 又麻烦,同时经常设计版本依赖对应关系,所以这里将所有工具集合发出来供大家一次性下载。工具包含如下: 工具介绍: 下面为安装包名: linux环境: jdk-8u45-linux-x64.rpm (jav…

Linux 编写一个 简单进度条

进度条 回车换行理解: 我们要理解,回车换行是两个概念: 换行是把光标移到下一行,是竖直的往下平移;" \n "回车是把光标移到当前行的最开始; " \r " 就和一起打字…

【计网】傻瓜式安装cpolar内网穿透

目录 一、注册账户 二、下载安装包 三、安装 四、查看AuthToken 五、简单使用 如果在本机部署项目外网是访问不到的,通过内网穿透就可以使本机部署的项目可被外网访问 一、注册账户 cpolar - secure introspectable tunnels to localhostcpolar secure intro…

数字技术助力智慧公厕,让公厕变身为全新创新应用

在如今数字化的时代,数字技术的集成应用已经渗透到了生活的方方面面。其中一个令人瞩目的领域就是智慧公厕。以前只是简单的厕所,如今借助数字技术的力量,智慧公厕变得功能强大、智能高效。接下来,我们将以智慧公厕源头领航厂家广…

【Docker】Docker-compose及Consul多容器编排工具

使用一个Dockerfile模版文件可以定义一个单独的应用容器,当需要定义多个容器时就需要编排 docker swarm(管理跨节点) 编排工具——docker compose Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板&…

数据治理是一个怎样的体系化的过程?_光点科技

数据治理是一个复杂而系统化的过程,旨在确保企业能够有效地管理、维护和利用其日益增长的数据资产。这一过程涉及多个层面和步骤,需要有明确的框架和战略规划。 数据治理的体系化始于明确定义的目标和愿景。企业需要明确意识到数据对于业务成功的重要性&…

微信小程序开发--入门

目录 前言 一.准备阶段 1.申请账号 2.安装开发工具 二.开发第一个小程序 1.创建项目 2.基础操作及语法 2.1目录结构 2.2 常见语法及文件类型 ​编辑 3.案例演示开发 1.新建页面 2.新建标题 3.后端传值 前言 简介: 微信小程序(WeChat …

蓝桥杯(七段码,C++)

思路&#xff1a; 1、把灯管的连接转为图结构&#xff0c;相邻的灯管即认为有边。 2、用深度搜索&#xff0c;去计算有多少种不同字符。 3、因为有每种字符都会重复算两遍&#xff0c;最后的结果需要数以2。 #include <iostream> using namespace std;int graph[7][7…

腾讯云国际站-阿里云OSS如何迁移到腾讯云COS?腾讯云cos迁移教程

下面小编将介绍当源对象存储部署在阿里云国际版OSS 时&#xff0c;如何配置全托管迁移任务和半托管迁移任务&#xff0c;实现顺利迁移数据至腾讯云国际版COS。 准备工作 阿里云对象存储 OSS 创建 RAM 子账号并授予相关权限&#xff1a; 登录 RAM 控制台。选择人员管理 > …

ubuntu 系统升级问题

起源&#xff1a;执行apt update和apt upgrade过后&#xff0c;其中的一个没有选择N&#xff0c;系统自动升级了&#xff0c;导致很多地方都不能使用 报错信息如下 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 正在计算更…

发货100虚拟商品自动发货系统存在SQL注入

漏洞描述 该系统存在SQL注入漏洞&#xff0c;可获取敏感信息及账号密码。 漏洞复现 构造SQL注入延时payload&#xff1a; M_id11%20AND%20(SELECT%208965%20FROM%20(SELECT(SLEEP(5)))sdhh)&typeproduct漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;…

​调用Lua脚本tostring(xxx)报attempt to call a nil value (global ‘tostring‘

在c程序里调用Lua脚本, 脚本中用到了转字符串 tostring(xxx) str "test" function output(a,b,c)d "a:"..tostring(a).."b:"..tostring(b).."c"..tostring(c)return d end 实际运行会报错&#xff1a; attempt to call a nil v…

ElasticSearch-Head 数据浏览406问题解决

解决方法&#xff1a; 1、打开Docker DeskTop的Containers&#xff0c;找到es-head容器 2、选择Exec Tab选项 3、编辑vendor.js文件 vim _site/vendor.js 4、显示行号 :set nu 5、修改配置 # 修改文件第6886、7574行 将"application/x-www-from-urlencodes"修改…

centos6/7 SOCKS5 堆溢出漏洞修复(RPM方式)curl 8.4 CVE-2023-38545 CVE-2023-38546

引用 https://darkdark.top/update-curl.html centos6 rpm 升级包下载&#xff1a;https://download.csdn.net/download/sinat_24092079/88425840 yum update libcurl-8.4.0-1.el6.1.x86_64.rpm curl-8.4.0-1.el6.1.x86_64.rpmcentos7 rpm 升级包下载&#xff1a;https://down…

Qt之模块介绍

Qt提供了很多功能模块&#xff0c;我们需要知道的是这些模块有些加入了标准库&#xff0c;有一些并没有加入到标准库。至于为什么没有加入到标准库通过chatgpt得到的答案如下&#xff1a; Qt 是一个强大的跨平台 C 框架&#xff0c;它包括了很多核心模块和功能&#xff0c;以支…

BuyVM 挂载存储块

发布于 2023-07-13 on https://chenhaotian.top/linux/buyvm-mount-block-storage/ BuyVM 挂载存储块 参考&#xff1a; https://zhujitips.com/2653https://www.pigji.com/898.html 1 控制台操作 存储块购买完毕后&#xff0c;进入后台管理界面&#xff0c;进入对应 VPS …

多测师肖sir_高级金牌讲师_python之模块008

python之模块 一、模块的介绍 &#xff08;1&#xff09;python模块&#xff0c;是一个python文件&#xff0c;以一个.py文件&#xff0c;包含了python对象定义和pyhton语句 &#xff08;2&#xff09;python对象定义和python语句 &#xff08;3&#xff09;模块让你能够有逻辑…