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_())
相关推荐
程序员的世界你不懂16 分钟前
Appium+python自动化(二十八)高级滑动
python·appium·自动化
武子康41 分钟前
Java-51 深入浅出 Tomcat 手写 Tomcat 类加载机制 双亲委派机制 生命周期 插件化
java·开发语言·spring boot·后端·spring·tomcat·springcloud
爬虫程序猿1 小时前
如何利用 Java 爬虫获得微店商品详情:实战指南
java·开发语言·爬虫
JovaZou1 小时前
[Python学习日记-92] 并发编程之多线程 —— 守护线程
开发语言·python·学习
火鸟21 小时前
Rust 通用代码生成器:莲花,红莲尝鲜版三十六,蛋糕商城哑数据模式
开发语言·rust·通用代码生成器·蛋糕商城·莲花·红莲·哑数据模式
虾球xz1 小时前
CppCon 2017 学习:Meta
开发语言·c++·学习
叶 落2 小时前
三种语言写 MCP
java·python·ai·typescript·mcp
99乘法口诀万物皆可变3 小时前
C#设计模式-Builder-生成器-对象创建型模式
开发语言·c#
cfqq19895 小时前
class对象【C#】2025复习
开发语言·c#
___波子 Pro Max.5 小时前
python list去重
python·list