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_())
相关推荐
weixin_307779135 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天8 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel8 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
海绵宝宝转agent8 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭8 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT9 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_962071579 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境10 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
\光辉岁月/10 小时前
5.java-数组
java·开发语言