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_())
相关推荐
笨鸟先飞,勤能补拙5 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
微学AI5 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
长和信泰光伏储能6 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
豆瓣鸡6 小时前
算法日记 - Day3
java·开发语言·算法
浦信仿真大讲堂6 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
韭菜炒鸡肝天6 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
Gu Gu Study7 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
Aaron - Wistron7 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
卷无止境7 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境7 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python