PyQt5按钮类控件Button

embedded/2025/1/14 18:40:44/

一、PushButton

开发中经常会用到的功能:

        1.点击。
        2.设置默认按钮。
        3.设置按钮为可切换状态按钮。 

1.方法 

方法名称作用备注
setText(QString)设置按钮上的文字,参数值为字符串
text()获取按钮上的文字
setIcon(QIcon)设置按钮icon,参数值为QIcon对象
setIconSize(QSize)设置按钮icon图标大小,参数值为QSize对象
setShortcut()设置快捷键,传入对象为字符串,如button.setShortcut("Ctrl+Q")  设置快捷键为Ctrl+Q
setDefault(bool)设置按钮是否为默认按钮(默认按钮在回车键被按下时会激活),参数值传入布尔值

应用场景(见示例代码1):

1.对话框中的默认按钮

2.登录界面中的默认登录按钮

3.聊天界面中默认的发关按钮

4.表单提交中的默认操作

5.确认与取消操作中的默认选择

setCheckable(bool)设置按钮是否可以切换状态,一般同信号toggled配合使用。调用这个方法时,按钮就多了两种状态,即选中和未选中状态。参会传入布尔值。只有调用该方法后,使用setChecked(bool)和toggle()才有效。

应用场景(见示例代码2):

1.切换开关功能

2.多选功能

3.筛选功能

4.选项组功能

setChecked(bool)设置按钮的当前状态为选中或未选中,传入参数值为布尔值,必须同setCheckable(bool)配合使用

应用场景(见示例代码3):

1.初始化状态

2.单选按钮组中的默认选择

3.实现开关功能的初始状态

4.根据程序状态更新按钮状态

toggle()手动切换按钮的选中状态。在程序中手动调用 toggle() 方法,将按钮的状态切换一次。见示例代码4
isCheckable()检查按钮是否具有切换(即保持按下状态)的功能
isChecked()返回按钮的选中状态,如果未调用setCheckable(bool),该方法的返回值一直为False。
isEnabled()返回按钮是否可用
isDown()按钮是否被按下

系统总结代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *class MyWin(QWidget):def __init__(self):super().__init__()self.resize(300, 320)self.setWindowTitle('按钮布局')# 1.创建按钮self.b11=QPushButton("按钮",self)self.b11.move(30,20)self.b12=QPushButton("2.是否可用",self)self.b12.move(160,20)self.b21=QPushButton("3.Ctlr+Q",self)self.b21.move(30,70)self.b22=QPushButton("4.icon",self)self.b22.move(160,70)self.b31=QPushButton("5.可选按钮",self)self.b31.move(30,120)self.b32=QPushButton("6.选中状态",self)self.b32.move(160,120)self.b41=QPushButton("7.切换状态",self)self.b41.move(30,170)self.b42=QPushButton("8.是否可切",self)self.b42.move(160,170)self.b51=QPushButton("9.是否选中",self)self.b51.move(30,220)self.b52=QPushButton("10.是否可用",self)self.b52.move(160,220)self.b61=QPushButton("11.是否按下",self)self.b61.move(30,270)self.b62=QPushButton("12.默认按钮",self)self.b62.move(160,270)# 设置文本/获取文本self.b11.setText("1.设置文本")text=self.b11.text()print(text)# 设置按钮是否可用self.b12.setEnabled(False)# 设置快捷键self.b21.setShortcut("Ctrl+Q")self.b21.clicked.connect(self.print)# 设置icon及尺寸self.b22.setIcon(QIcon('./LoadFile/ico.jpeg'))self.b22.setIconSize(QSize(20,20))# 设置按钮为是否可切换选中状态按钮self.b31.setCheckable(True)# 设置按钮处于选中状态self.b32.setCheckable(True)self.b32.setChecked(True)# 切换按钮状态self.b41.setCheckable(True)self.b41.setChecked(False)self.b41.toggle()# 返回按钮设置的可选属性的布尔值print(f'按钮8的是否可切换属性值:{self.b42.isCheckable()}')# 返回按钮是否被选中的状态self.b51.setCheckable(True)self.b51.setChecked(True)print(f"按钮9是否处于选中状态:{self.b51.isChecked()}")# 返回按钮是否可用的属性值print(f"按钮10是否可用状态:{self.b52.isEnabled()}")# 返回按钮是否被按下self.b61.pressed.connect(lambda :self.buttonIsDown(self.b61))self.b61.released.connect(lambda :self.buttonIsDown(self.b61))# 设置默认按钮self.b62.setDefault(True)self.b62.clicked.connect(self.sendInfo)def sendInfo(self):print("你好,默认按钮功能~~")def print(self):print('设置了快捷键~~')def state(self,a):print(f"按钮是否被按下:{a}")def buttonIsDown(self,button:QPushButton):if button.isDown():print(f"{button.text()}状态:按下~~")else:print(f"{button.text()}状态:松开~~")if __name__ == '__main__':app = QApplication(sys.argv)w = MyWin()qw=QWidget()w.show()app.exec()

示例代码1:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QDialog
def info():print('取消~~')def main():app = QApplication(sys.argv)dialog = QDialog()layout = QVBoxLayout(dialog)button1 = QPushButton("确定", dialog)layout.addWidget(button1)button2 = QPushButton("取消", dialog)button2.setDefault(True)button2.clicked.connect(info)layout.addWidget(button2)button3 = QPushButton("OK",dialog)layout.addWidget(button3)dialog.show()sys.exit(app.exec_())if __name__ == "__main__":main()

示例代码2:

(1)切换开关功能:
可以将 QPushButton 用作切换开关,例如在一个音乐播放器应用程序中,你可以使用一个可检查按钮来控制音乐的播放和暂停。当按钮被按下时,音乐开始播放,并且按钮保持按下状态(checked),当再次按下按钮时,音乐暂停,按钮恢复到未按下状态(unchecked)。python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtGui import QIcon
import pygamedef toggle_music(state):if state:pygame.mixer.music.play()button.setIcon(QIcon("play_icon.png"))else:pygame.mixer.music.pause()button.setIcon(QIcon("pause_icon.png"))pygame.mixer.init()
pygame.mixer.music.load("music.mp3")app = QApplication(sys.argv)
window = QWidget()
button = QPushButton(window)
button.setIcon(QIcon("play_icon.png"))
button.setCheckable(True)
button.move(50, 50)
button.resize(50, 50)
button.toggled.connect(toggle_music)
window.show()
sys.exit(app.exec_())代码解释:
pygame.mixer.init() 和 pygame.mixer.music.load("music.mp3") 用于初始化和加载音乐文件。
button.setCheckable(True) 使按钮可检查,这样它可以在按下和未按下状态之间切换。
button.toggled.connect(toggle_music) 将按钮的 toggled 信号连接到 toggle_music 函数。
在 toggle_music 函数中,根据按钮的状态(state),播放或暂停音乐,并相应地更改按钮的图标。
(2)多选功能:
在一个任务管理应用程序中,可以使用多个可检查按钮来表示多个任务的选择状态。用户可以通过点击按钮来标记任务是否完成。python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButtondef task_toggled(state):print(f"Task toggled: {state}")app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout(window)
button1 = QPushButton("Task 1")
button1.setCheckable(True)
button1.toggled.connect(task_toggled)
layout.addWidget(button1)
button2 = QPushButton("Task 2")
button2.setCheckable(True)
button2.toggled.connect(task_toggled)
layout.addWidget(button2)
window.show()
sys.exit(app.exec_())代码解释:
QVBoxLayout 用于垂直排列多个部件。
每个 QPushButton 都通过 button.setCheckable(True) 设置为可检查状态。
当用户点击按钮时,按钮的状态会切换,并且会调用 task_toggled 函数,打印出任务的状态。
(3)筛选功能:
在一个文件管理器应用程序中,可以使用可检查按钮来筛选文件类型。例如,用户可以点击一个按钮来筛选出所有的图片文件,再次点击可以取消筛选。python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButtondef filter_files(state):if state:print("Filtering files...")else:print("Removing filter...")app = QApplication(sys.argv)
window = QWidget()
button = QPushButton("Filter Images")
button.setCheckable(True)
button.move(50, 50)
button.resize(100, 30)
button.toggled.connect(filter_files)
window.show()
sys.exit(app.exec_())代码解释:
button.setCheckable(True) 让按钮可以在按下和未按下状态之间切换。
button.toggled.connect(filter_files) 将按钮的 toggled 信号连接到 filter_files 函数。
当按钮状态改变时,filter_files 函数会根据按钮状态进行不同的操作,如开启或关闭文件筛选功能。
(4)选项组功能:
与 QButtonGroup 结合使用,创建一组互斥的可检查按钮,用户可以在一组选项中选择一个。python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QButtonGroupdef option_selected(button):print(f"Selected option: {button.text()}")app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout(window)
button_group = QButtonGroup()
button1 = QPushButton("Option 1")
button1.setCheckable(True)
button_group.addButton(button1)
layout.addWidget(button1)
button2 = QPushButton("Option 2")
button2.setCheckable(True)
button_group.addButton(button2)
layout.addWidget(button2)
button_group.buttonClicked.connect(option_selected)
window.show()
sys.exit(app.exec_())代码解释:
QButtonGroup 用于管理一组按钮,确保同一时间只有一个按钮被选中。
每个 QPushButton 通过 button.setCheckable(True) 设为可检查。
button_group.buttonClicked.connect(option_selected) 将 QButtonGroup 的 buttonClicked 信号连接到 option_selected 函数,当用户点击按钮时,会调用 option_selected 函数,打印出选中的选项。
总之,button.setCheckable(True) 适用于需要在两种状态之间切换,并根据状态执行不同操作的场景,如开关、多选、筛选和选项组等,通过使用 toggled 信号和相应的槽函数,可以方便地处理按钮状态的变化,为用户提供更丰富的交互体验。

 示例代码3:

示例代码4:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButtonapp = QApplication(sys.argv)
window = QWidget()
button = QPushButton("按钮", window)
button.move(50, 50)
# 设置按钮为可切换状态
button.setCheckable(True)
print(button.isChecked())
button.setChecked(True)
print(button.isChecked())
button.toggle()
print(button.isChecked())window.show()
sys.exit(app.exec_())

2.信号

信号名称说明备注
clicked按钮按下再释放时发出
pressed按钮被按下时发出
released按钮被释放时发出
toggled(bool)当按钮的切换状态发生变化时发出,参数 bool 表示新的状态

3.答疑

(1)setChecked(True)为什么必须同setCheckable(True)配合使用才有效

一、setCheckable(True) 的作用

  • button.setCheckable(True) 是用来将 QPushButton 转换为一个可检查的按钮。
  • 正常情况下,QPushButton 是一个普通的按钮,它只有按下和释放两种状态,按下时触发 clicked 信号,释放后恢复原状。
  • 当你调用 button.setCheckable(True) 时,你将这个按钮变成了一个可检查的按钮,它有了额外的两种状态:选中(checked)和未选中(unchecked)。这使得按钮可以保持在选中状态或未选中状态,而不仅仅是按下和释放的瞬间状态。

二、setChecked(True) 的作用

  • button.setChecked(True) 是用来设置按钮的选中状态为 True,即按钮处于选中状态。
  • 然而,如果 button 没有被设置为可检查(即没有调用 button.setCheckable(True)),那么 button.setChecked(True) 的操作是没有意义的,因为普通按钮没有选中和未选中的概念,它只关注点击操作。

三、代码示例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButtondef button_clicked():print("Button clicked.")def button_toggled(state):print(f"Button toggled, state: {state}")app = QApplication(sys.argv)
window = QWidget()
# 创建一个普通的 QPushButton
button1 = QPushButton("Normal Button", window)
button1.move(50, 50)
button1.resize(100, 30)
button1.clicked.connect(button_clicked)# 创建一个可检查的 QPushButton
button2 = QPushButton("Checkable Button", window)
button2.move(50, 100)
button2.resize(120, 30)
button2.setCheckable(True)  # 使按钮可检查
button2.setChecked(True)  # 设置为选中状态
button2.toggled.connect(button_toggled)  # 连接 toggled 信号window.show()
sys.exit(app.exec_())

代码解释

  1. 普通按钮
    • button1 是一个普通的 QPushButton,当用户点击它时,会触发 button_clicked 函数,并且按钮在按下和释放后会立即恢复原状。
    • 对于 button1,即使你调用 button1.setChecked(True) 也不会有任何效果,因为它不是可检查的按钮。
  2. 可检查按钮
    • button2 首先调用 button2.setCheckable(True),将其变成可检查的按钮,此时它可以有选中和未选中状态。
    • 然后调用 button2.setChecked(True),将按钮初始化为选中状态。
    • 当用户点击 button2 时,它会在选中和未选中状态之间切换,并触发 button_toggled 函数,传递新的状态(True 或 False)。

四、原理说明

  • 在 PyQt5 中,QPushButton 继承自 QAbstractButtonQAbstractButton 有 setChecked() 和 setCheckable() 方法。
  • setCheckable() 修改了按钮的属性,允许它存储和切换选中状态。
  • setChecked() 实际上是在修改按钮的内部状态存储值(例如,一个布尔型变量),如果 setCheckable() 没有被调用,这个存储值不会被使用,因为普通按钮不使用这个存储值,只有可检查按钮才会根据这个存储值来确定自己的显示和行为。

五、总结

  • button.setCheckable(True) 是开启按钮的可检查属性,让按钮可以存储和切换选中状态。
  • button.setChecked(True) 是设置按钮的选中状态,只有在按钮被设置为可检查后,该操作才有意义,因为只有可检查按钮才有选中和未选中的概念,才能在选中和未选中状态之间切换并保持状态。

总之,为了让 button.setChecked(True) 有效,你需要先将按钮设置为可检查的,以便它能够保持并显示你所设置的选中状态,同时使用 toggled 信号和相应的槽函数可以更好地处理按钮状态的变化,为用户提供更丰富的交互体验。

关于QPushButton优质学习资料如下:

PyQt5入门(二)--------按钮控件(PushButton)_pyqt5 button-CSDN博客

二、RadioButton

三、CheckBox

四、ToolButton

五、CommandLinkButton命令链接按钮

六、DialogButtonBox

七、按钮组 


http://www.ppmy.cn/embedded/153598.html

相关文章

Elasticsearch(四)

Elasticsearch Java API 操作1.1 引入依赖1.2 客户端对象1.3 索引操作1.3.1 创建索引1.3.2 查看索引1.3.3 删除索引 1.4 文档操作1.4.1 新增文档1.4.2 修改文档1.4.3 查询文档1.4.4 删除文档1.4.5 批量新增1.4.6 批量删除 1.5 高级查询1.5.1 请求体查询1.5.1.1 查询所有索引数据…

网络安全-web渗透环境搭建-BWAPP(基础篇)

01--所需系统环境: 虚拟主机系统部署(vmware,虚拟主机创建、虚拟主机网络配置(桥接,便于网络中多个主机都能访问虚拟主机)、虚拟软件功能,快照、克隆、镜像文件加载,ova文件制作&am…

STM32如何测量运行的时钟频率

前言 环境: 芯片:STM32F103C8T6 Keil:V5.24.2.0 一、简介STM32F103C8T6的时钟源 ①HSI 内部高速时钟,RC振荡器,频率为8MHz,精度不高。②HSE 外部高速时钟,可接石英/陶瓷谐振器,频率范围为4MHz~16MHz&…

Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)

1、下载jdk安装并配置环境变量(自行百度) https://www.oracle.com/java/technologies/downloads/#java8 2、下载spring-framework源码,切换分支到5.3.x https://github.com/spring-projects/spring-framework.git 备用地址 https://gitco…

MySQL教程之:常见查询示例

下面举例说明如何用MySQL解决一些常见问题。 一些示例使用表shop来保存某些交易者(经销商)的每件商品的价格(商品编号)。假设每个交易者每件商品都有一个固定的价格,那么(article,dealer&#…

leetcode-------mysql

SQL 面试宝典 10. 人口流动分析 - 力扣(LeetCode) 表: 各城市人口流动表 ---------------------- | 字段名称 | 类型 | ---------------------- | 流出城市 | varchar | | 流入城市 | varchar | | 交通工具 | int | | 日期 …

从预训练的BERT中提取Embedding

文章目录 背景前置准备思路利用Transformer 库实现 背景 假设要执行一项情感分析任务,样本数据如下 可以看到几个句子及其对应的标签,其中1表示正面情绪,0表示负面情绪。我们可以利用给定的数据集训练一个分类器,对句子所表达的…

基于Python的音乐播放器 毕业设计-附源码73733

摘 要 本项目基于Python开发了一款简单而功能强大的音乐播放器。通过该音乐播放器,用户可以轻松管理自己的音乐库,播放喜爱的音乐,并享受音乐带来的愉悦体验。 首先,我们使用Python语言结合相关库开发了这款音乐播放器。利用Tkin…