【PyQt学习篇 · ⑪】:QPushButton和QCommandLinkButton的使用

文章目录

  • 构造函数
  • 菜单设置
  • 扁平化
  • 默认处理
  • 右键菜单
  • QCommandLinkButton的使用

构造函数

QPushButton的构造函数如下:

    """QPushButton(parent: Optional[QWidget] = None)QPushButton(text: Optional[str], parent: Optional[QWidget] = None)QPushButton(icon: QIcon, text: Optional[str], parent: Optional[QWidget] = None)"""

示例代码:

from PyQt5.Qt import *
from PyQt5.QtGui import QIcon
import sysapp = QApplication(sys.argv)window = QWidget()
window.resize(300, 300)btu = QPushButton(QIcon('mouse.png'), '按钮', window)     # 使用最全的构造函数btu.setIconSize(QSize(50, 50))
btu.resize(80, 50)window.show()
sys.exit(app.exec_())

运行结果:

在这里插入图片描述

菜单设置

在 PyQt5 中,QPushButton 类提供了设置菜单的功能。以下是 QPushButton 菜单相关的 API 以及 QMenu 相关的 API 的说明:

  1. setMenu(QMenu)
    • setMenu(QMenu) 用于将一个 QMenu 对象设置为 QPushButton 的下拉菜单。当用户单击按钮时,会自动显示菜单。
  2. menu()
    • menu() 返回与 QPushButton 关联的 QMenu 对象,如果未设置菜单,则返回 None。
  3. showMenu()
    • showMenu() 在不单击按钮的情况下强制显示菜单。
  4. QMenu 相关 API:
    • addMenu(QMenu) 用于将子菜单添加到菜单中。
    • addSeparator() 用于在菜单中添加分隔线。
    • addAction(QAction) 用于添加动作到菜单中。
    • setTitle(str) 用于设置菜单标题。
    • setIcon(QIcon) 用于设置菜单图标。
    • triggered(QAction) 信号在菜单中的动作被触发时发出。可以使用该信号处理菜单事件。

示例1代码:

from PyQt5.Qt import *
from PyQt5.QtGui import QIcon
import sysapp = QApplication(sys.argv)window = QWidget()
window.resize(300, 300)btu = QPushButton(QIcon('mouse.png'), '按钮', window)     # 使用最全的构造函数
btu.setIconSize(QSize(50, 50))
btu.resize(100, 50)# 菜单的设置
mean = QMenu()# 行为动作:新建、打开、分割线、退出
new_action = QAction(QIcon('mouse.png'), '新建')
new_action.triggered.connect(lambda: print('新建文件'))open_action = QAction(QIcon('mouse.png'), '打开')
open_action.triggered.connect(lambda: print('打开文件'))exit_action = QAction('退出')
exit_action.triggered.connect(lambda: print('退出'))# 子菜单
open_recent_menu = QMenu(mean)      # 将子菜单添加到主菜单中
open_recent_menu.setTitle('最近打开')file_action = QAction('PyQt5学习')# 添加
mean.addAction(new_action)
mean.addAction(open_action)# 子菜单添加行为后添加到主菜单中
open_recent_menu.addAction(file_action)
mean.addMenu(open_recent_menu)mean.addSeparator()     # 添加分割线
mean.addAction(exit_action)btu.setMenu(mean)   # 设置菜单window.show()
sys.exit(app.exec_())

运行结果:

在这里插入图片描述

扁平化

在 PyQt5 中,QPushButton 类提供了扁平化按钮的功能。以下是 QPushButton 中与扁平化相关的 API 的说明:

  1. setFlat(bool):
    • setFlat(bool) 用于设置按钮是否扁平化。
    • 参数 bool 为 True,按钮将显示为扁平化样式;为 False,按钮将显示为正常样式。
  2. isFlat():
    • isFlat() 返回一个布尔值,表示按钮是否处于扁平化状态。
    • 如果按钮被设置为扁平化,则返回 True;否则返回 False。

示例代码:

from PyQt5.Qt import *
import sysapp = QApplication(sys.argv)window = QWidget()
window.resize(300, 300)btu = QPushButton(window)
btu.setStyleSheet('background-color: red;')
btu.setText('这是一个按钮')
btu.setFlat(True)   # 设置按钮为扁平化print(btu.isFlat())window.show()
sys.exit(app.exec_())

运行结果:
设置背景颜色之后,再设置为扁平化,就不会绘制按钮的背景颜色。

在这里插入图片描述

默认处理

在 PyQt5 中,QPushButton 类提供了默认处理按钮的功能。使用默认处理功能后,当用户按下回车键时,会自动触发与该按钮相关联的信号,从而实现点击该按钮的效果。

以下是 QPushButton 中与默认处理相关的 API 的说明:

  1. setAutoDefault(bool)
    • setAutoDefault(bool) 用于设置按钮的默认处理功能是否打开。
    • 参数 bool 为 True,按钮默认处理功能打开;为 False,按钮默认处理功能关闭。
  2. autoDefault()
    • autoDefault() 返回一个布尔值,表示按钮是否开启了默认处理功能。
    • 如果按钮开启了默认处理功能,则返回 True;否则返回 False。
    • 示例用法:
  3. setDefault(bool)
    • setDefault(bool) 用于设置按钮为默认按钮。
    • 默认按钮表示当用户按下回车键时,会自动触发与该按钮相关联的信号。
    • 参数 bool 为 True,按钮设置为默认按钮;为 False,按钮取消默认按钮的设置。
  4. isDefault():
    • isDefault() 返回一个布尔值,表示按钮是否为默认按钮。
    • 如果按钮为默认按钮,则返回 True;否则返回 False。

示例代码:

from PyQt5.Qt import *
import sysapp = QApplication(sys.argv)window = QWidget()
window.resize(300, 300)btu1 = QPushButton(window)
btu1.setText('btu')btu = QPushButton(window)
btu.setText('这是一个按钮')
btu.move(100, 100)btu.pressed.connect(lambda: print('这个按钮被按下'))btu.setAutoDefault(True)    # 给btu设置为自动默认window.show()
sys.exit(app.exec_())

运行结果:
运行后鼠标点击“这是一个按钮”按钮被点击选中,按下回车键,按钮被点击,执行打印结果。

在这里插入图片描述
将以上btu.setAutoDefault(True)换成btu.setDefault(True),即运行程序后,在一开始就将按钮变为默认按钮。

运行结果:

在这里插入图片描述

右键菜单

在 PyQt5 中,QPushButton 类提供了右键菜单的功能。通过使用该功能,用户可以在右键单击按钮时弹出自定义菜单。

以下是 QPushButton 中与右键菜单相关的 API 的说明:

  1. customContextMenuRequested(QPoint)

    • customContextMenuRequested(QPoint) 是一个信号,当用户在按钮上右键单击时发射。
    • 该信号会将鼠标右键单击的位置(QPoint)作为参数传递给与之相关联的槽函数,槽函数可以利用此位置信息进行自定义菜单的弹出操作。
  2. setContextMenuPolicy(Qt.CustomContextMenu)

    • setContextMenuPolicy(Qt.CustomContextMenu) 用于设置按钮的菜单策略为自定义菜单。
    • 自定义菜单策略开启后,当用户在该按钮上右键单击时,customContextMenuRequested(QPoint) 信号就会被触发。
  3. Qt.DefaultContextMenu()

    • Qt.DefaultContextMenu() 是一个用于内置菜单的常量,表示用户在按钮上右键单击时弹出的默认菜单。
    • 调用对象方法contextMenuEvent(event),它 是一个重写的方法,用于在用户右键单击按钮时弹出内置菜单。
  4. Qt.CustomContextMenu

    • Qt.CustomContextMenu 是一个用于自定义菜单的常量,表示用户在按钮上右键单击时必须弹出自定义菜单。

示例1代码:

from PyQt5.Qt import *
import sysclass Window(QWidget):def contextMenuEvent(self, evt):mean = QMenu(self)  # 主菜单new_action = QAction(QIcon('mouse.png'), '新建')new_action.triggered.connect(lambda: print('新建文件'))open_action = QAction(QIcon('mouse.png'), '打开')open_action.triggered.connect(lambda: print('打开文件'))exit_action = QAction(QIcon('mouse.png'), '关闭')exit_action.triggered.connect(lambda: print('关闭'))open_recent_menu = QMenu(mean)open_recent_menu.setTitle('最近打开')open_recent_action = QAction('PyQt5学习')# 将创建的行为动作和子菜单添加到主菜单中mean.addAction(new_action)mean.addAction(open_action)open_recent_menu.addAction(open_recent_action)mean.addMenu(open_recent_menu)mean.addSeparator()mean.addAction(exit_action)mean.exec_(evt.globalPos())if __name__ == '__main__':app = QApplication(sys.argv)window = Window()window.resize(300, 300)window.show()sys.exit(app.exec_())

运行结果:

在这里插入图片描述
示例2代码:

from PyQt5.Qt import *
from PyQt5.QtCore import Qt
import sysapp = QApplication(sys.argv)window = Window()
window.resize(300, 300)def show_menu(point):   # point介绍到的是相对于窗口的位置mean = QMenu(window)  # 主菜单new_action = QAction(QIcon('mouse.png'), '新建')new_action.triggered.connect(lambda: print('新建文件'))open_action = QAction(QIcon('mouse.png'), '打开')open_action.triggered.connect(lambda: print('打开文件'))exit_action = QAction(QIcon('mouse.png'), '关闭')exit_action.triggered.connect(lambda: print('关闭'))open_recent_menu = QMenu(mean)open_recent_menu.setTitle('最近打开')open_recent_action = QAction('PyQt5学习')# 将创建的行为动作和子菜单添加到主菜单中mean.addAction(new_action)mean.addAction(open_action)open_recent_menu.addAction(open_recent_action)mean.addMenu(open_recent_menu)mean.addSeparator()mean.addAction(exit_action)# 将局部window上的point点,映射到全局屏幕mapToGlobal上的点dest_point = window.mapToGlobal(point)mean.exec_(dest_point)window.setContextMenuPolicy(Qt.CustomContextMenu)
window.customContextMenuRequested.connect(show_menu)window.show()
sys.exit(app.exec_())

运行结果:
如以上代码所示,因为point获取的是相对于窗口的坐标,而mean.exec_()是将菜单放到全局坐标(全屏幕)上,所以需要映射,将局部window上的point点,映射到全局屏幕mapToGlobal上的点。

在这里插入图片描述

QCommandLinkButton的使用

QCommandLinkButton 是 PyQt5 中的一个组件,它是一个带有标题和描述的命令按钮,通常用于表达重要操作的步骤。

使用 QCommandLinkButton 可以让用户更容易地理解和操作应用程序。

在 PyQt5 中,我们可以使用 QCommandLinkButton 构造函数创建命令链接按钮。QCommandLinkButton 构造函数有以下几种:

  • QCommandLinkButton(parent=None),创建一个没有文本和描述的命令链接按钮。
  • QCommandLinkButton(text, parent=None),创建一个具有文本但是没有描述的命令链接按钮。
  • QCommandLinkButton(text, description, parent=None),创建一个同时具有文本和描述的命令链接按钮。

示例代码:

from PyQt5.Qt import *
import sysapp = QApplication(sys.argv)window = QWidget()
window.resize(300, 300)combtu1 = QCommandLinkButton('按钮1', '这是描述1', window)
combtu1.move(100, 0)combtu2 = QCommandLinkButton(window)
combtu2.setText('按钮')
combtu2.setDescription('这是描述2')
combtu2.setIcon(QIcon('mouse.png'))
combtu2.move(100, 100)print(combtu1.description())    # 打印按钮1的描述window.show()
sys.exit(app.exec_())

运行结果:

在这里插入图片描述

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

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

相关文章

【QT】 Qt自定义ui控件

在使用Qt的ui设计时,Qt为我们提供了标准的窗口控件,但是在很多复杂工程中,标准窗口控件并不能满足所有的需求,这时就需要我们自定义控件。我们自定义的类既可以作为独立的窗口显示,又可以作为一个控件显示。 我们要实现…

Flink SQL DataGen Connector 示例

Flink SQL DataGen Connector 示例 1、概述 使用 Flink SQL DataGen Connector,可以快速地生成符合规则的测试数据,可以在不依赖真实数据的情况下进行开发和测试。 2、使用示例 创建一个名为 “users” 的表,包含 6 个字段:id…

【Leetcode】349. 两个数组的交集

题意 给定两个数组,编写一个函数来计算它们的交集。 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 思路 这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决…

Flask的一种启动方式和三种托管方式

1. 原生启动 Flask 支持使用原生的 app.run() 方法来启动应用程序。这种方法是最简单、最基本的启动方式,适用于开发环境和小型应用程序。 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, World!if __name__ __main__…

2023NOIP A层联测25-滈葕

给定一个 01 权有向图,给每个点赋予 ABCD 中的一个字母使得每条有向边 ( u , v , w ) (u,v,w) (u,v,w) 都满足 w 1 ⟺ ( a u , a v ) ∈ { ( A , B ) , ( A , D ) , ( B , A ) , ( B , D ) , ( C , A ) , ( C , B ) , ( C , D ) } w1\Longleftrightarrow(a_u,a_v…

Docker从入门到上天系列第一篇:Docker简介以及Docker存在的定位和意义

大神推荐:作者有幸结识技术大神孙哥为好友获益匪浅,现在把孙哥作为朋友分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员。 本专栏简介:话不多说,让我们一起干翻Docker 本文章简介:话不多说,让我们讲清楚首先讲清楚Docker是什么 文章…

JVM线上问题排查基本操作

1. 要解决的问题 CPU 飚高,内存溢出,频繁 GC 2. CPU 飚高 2.1 定位问题的思路 首先找到 CPU 飚高的那个 Java 进程,因为你的服务器会有多个 JVM 进程。 然后找到那个进程中的 “问题线程”, 最后根据线程堆栈信息找到问题代码。…

数据结构HW1

1.(10分) 编程实现矩阵乘法&#xff08;源文件命名matrix.c&#xff09;。函数定义如下&#xff1a; int matmult (int a[][], int b[][]) { // 注意判断a、b维度可能不匹配&#xff0c;且可能是空矩阵 } #include<stdio.h>// 定义矩阵的最大维度 #define MAX_ROWS…

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{field1…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…

前端框架Vue学习 ——(七)Vue路由(Vue Router)

文章目录 Vue路由使用场景Vue Router 介绍Vue Router 使用 Vue路由使用场景 使用场景&#xff1a;如下图&#xff0c;点击部门管理的时候显示部门管理的组件&#xff0c;员工管理的时候显示员工管理的组件。 前端路由&#xff1a;指的是 URL 中的 hash(#号)与组件之间的对应关…

k8spod详解其二

一&#xff0c;资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为…

软件开发必备神器!一文读懂10款热门看板工具推荐!

看板&#xff08;Kanban&#xff09;是一种流行的框架&#xff0c;用于实施敏捷和DevOps软件开发。它要求实时沟通每个人的能力&#xff0c;并全面透明地展示正在进行的工作。工作项目在看板上以可视化方式表示&#xff0c;使项目经理和所有团队成员可以随时查看每个工作的状态…

比特币全节点同步加速记录(使用Bitcoin Core钱包)

1. 预先下载或从别的地方拷贝区块数据而不是直接在Bitcoin Core钱包中下载 这方面可以参考 截止到2022年8月的区块数据 2. 将区块头数据和区块实体数据分开存储 区块头数据放到SSD中&#xff0c;区块实体数据放到HDD中 这方面可以参考 BitcoinCore节点同步加速原理和方法实验…

“网站不安全”该如何解决

当我们的网站被客户访问的时候&#xff0c;经常会出现提示不安全的情况&#xff0c;导致客户的不信任&#xff0c;从而出现客户流失的现象&#xff0c;这种情况我们应该如何解决呢&#xff1f; 首先&#xff0c;我们要确定网站会出现不安全的原因&#xff0c;一般来说&#xff…

vue项目中订单完成提交按钮动画

1. 动画1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Order</title><!-- <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/re…

P2910 [USACO08OPEN] Clear And Present Danger S

Portal. 最短路。 考虑到数据范围 N ≤ 100 N\leq 100 N≤100&#xff0c;可以用 Floyd 算法解决。 对于要求的行走序列&#xff0c;按顺序累加答案即可。 注意数组大小。 #include <bits/stdc.h> using namespace std; #define int long longint A[10005],f[105][…

【数据结构】单向链表的增删查改以及指定pos位置的插入删除

目录 单向链表的概念及结构 尾插 头插 尾删 ​编辑 头删 查找 在pos位置前插 在pos位置后插 删除pos位置 删除pos的后一个位置 总结 代码 单向链表的概念及结构 概念&#xff1a;链表是一种 物理存储结构上非连续 、非顺序的存储结构&#xff0c;数据元素的 逻辑顺序 是…

收藏丨20个医疗场景经典、热门数据集资源汇总

当今&#xff0c;人工智能技术在医疗领域的应用日益广泛&#xff0c;其中医疗数据集起到了至关重要的作用。本文将介绍 20 个经典的医疗开源数据集&#xff0c;涵盖了各个部位、CT\MRI\内窥镜等多种模态数据&#xff0c;以帮助研究者们更好地探索和研发医疗AI大模型。 同时&am…

uniapp小程序使用web-view组件页面分享后,点击没有home小房子解决办法

uniapp小程序使用web-view组件页面分享后&#xff0c;点击没有home小房子解决办法 小程序 &#xff1a;IOS 测试正常&#xff0c; 安卓 不显示home 微信小程序使用的是全局自定义导航&#xff0c;通过首页 banner 跳转到一个 web-view 页面&#xff0c;展示官网。 web-view 页…