Python GUI 编程 | QAbstractButton 抽象按钮类详解 — 按钮状态设置

🌟想系统化学习 GUI 编程?看看这个:[Python GUI 编程] PySide & PyQt - 学习手册-CSDN博客

QAbstractButton 因为继承自 QWidget 所以,QWidget 中一些关于状态的设定对 QAbstractButton 派生出来的子类也同样有用,比如是否可用,是否展示等(这章就不提了):

传送门 🚀:QWidget 窗口控件详解 --- 控件交互操作

0x01:isDown() & setDown(bool)

QAbstractButton 的 isDown() 可以判断按钮是否已经按下;setDown(bool) 则可以设置按钮是否被按下。看如下示例:

python 复制代码
import sys
from PyQt5.Qt import *
​
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 200)
        self.init_ui()
    
    def init_ui(self):
        # 创建多个由 QAbstractButton 类的子类创建的按钮
        btn1 = QPushButton("QPushButton", self)
        btn1.move(200, 50)
        btn2 = QRadioButton("QRadioButton", self)
        btn2.move(200, 100)
        btn3 = QCheckBox("QCheckBox", self)
        btn3.move(200, 150)
​
        # 设置按钮被按下
        btn1.setDown(True)
        btn2.setDown(True)
        btn3.setDown(True)
​
        # 判断按钮是否被按下
        print(btn1.isDown())
        print(btn2.isDown())
        print(btn3.isDown())
        
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = MyWidget()
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())

0x02:isCheckable() & setChecked(bool)

0x0201:演示案例 --- isCheckable()

QAbstractButton 的 ischeckable() 可以判断按钮是否可以被(持续)选中;setChecked(bool) 则可以设置按钮是否可以被选中,看下面这个示例:

python 复制代码
import sys
from PyQt5.Qt import *
​
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 200)
        self.init_ui()
    
    def init_ui(self):
        # 创建多个由 QAbstractButton 类的子类创建的按钮
        btn1 = QPushButton("QPushButton", self)
        btn1.move(200, 50)
        btn2 = QRadioButton("QRadioButton", self)
        btn2.move(200, 100)
        btn3 = QCheckBox("QCheckBox", self)
        btn3.move(200, 150)
​
        # 判断按钮是否可以被选中
        print(btn1.isCheckable())
        print(btn2.isCheckable())
        print(btn3.isCheckable())
​
        
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = MyWidget()
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())

0x0202:演示案例 --- setCheckable(bool)

虽然默认情况下,QPushButton 无法被选中,但是我们可以通过 setCheckable(bool) 设置它可以被选中,看看下面这个示例:

python 复制代码
import sys
from PyQt5.Qt import *
​
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 200)
        self.init_ui()
    
    def init_ui(self):
        # 创建多个由 QAbstractButton 类的子类创建的按钮
        btn1 = QPushButton("QPushButton", self)
        btn1.move(200, 50)
        btn2 = QRadioButton("QRadioButton", self)
        btn2.move(200, 100)
        btn3 = QCheckBox("QCheckBox", self)
        btn3.move(200, 150)
​
        btn1.setCheckable(True) # 设置按钮可以被选中
        # 判断按钮是否可以被选中
        print(btn1.isCheckable())
        print(btn2.isCheckable())
        print(btn3.isCheckable())
​
        
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = MyWidget()
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())

0x03:isChecked() & setChecked(bool)

QAbstractButton 的 setChecked(bool) 可以设置按钮是否被选中;isChecked() 则可以判断按钮是否被选中:

python 复制代码
import sys
from PyQt5.Qt import *
​
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 200)
        self.init_ui()
    
    def init_ui(self):
        # 创建多个由 QAbstractButton 类的子类创建的按钮
        btn1 = QPushButton("QPushButton", self)
        btn1.move(200, 50)
        btn2 = QRadioButton("QRadioButton", self)
        btn2.move(200, 100)
        btn3 = QCheckBox("QCheckBox", self)
        btn3.move(200, 150)
​
        # 设置按钮被选中
        btn1.setChecked(True)
        btn2.setChecked(True)
        btn3.setChecked(True)
​
        # 判断按钮是否被选中
        print(btn1.isChecked())
        print(btn2.isChecked())
        print(btn3.isChecked())
​
        
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
window = MyWidget()
# 3. 展示控件
window.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
相关推荐
java1234_小锋2 分钟前
简述Mybatis的插件运行原理?
java·开发语言·mybatis
花开花富贵13 分钟前
多语言的爱意告白
python
charlie11451419117 分钟前
勇闯前后端Week2:后端基础——HTTP与REST
开发语言·网络·笔记·网络协议·学习·http
福尔摩斯张43 分钟前
二维数组详解:定义、初始化与实战
linux·开发语言·数据结构·c++·算法·排序算法
大佬,救命!!!1 小时前
C++函数式策略模式代码练习
开发语言·c++·学习笔记·学习方法·策略模式·迭代加深·多文件编译
T***16071 小时前
JavaScript打包
开发语言·javascript·ecmascript
qq_336313931 小时前
java基础-常用的API
java·开发语言
百锦再1 小时前
第21章 构建命令行工具
android·java·图像处理·python·计算机视觉·rust·django
道一231 小时前
C# 读取文件方法介绍
开发语言·c#