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_())
相关推荐
孙启超17 分钟前
【AI开发之Rust】第 3 课:字符串与复合类型 —— 数据怎么放
开发语言·人工智能·后端·rust·llm·transformer
t-think23 分钟前
C++ string 类(上)—— string类初识与常用接口详解
开发语言·c++
cpp_learners36 分钟前
C++ 实现责任链模式(Chain of Responsibility):从一堆 if-else 到可插拔的处理管道
开发语言·c++·责任链模式
2601_9622982742 分钟前
Python自动化脚本的编写01
python·appium·自动化脚本·web自动化·应收账款管理
君顾11 小时前
外卖CPS软件开发实战:从系统架构到部署全流程指南
java·开发语言·外卖
AIFQuant1 小时前
Python实时外汇行情接入实战:WebSocket与REST K线查询
开发语言·python·websocket
babe小鑫1 小时前
生物统计学专业校招:SAS、R、Python学习顺序实用指南
python·学习·r语言
vx_Biye_Design2 小时前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜2 小时前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio