Day 06——QCheckBox(复选框)与 QRadioButton(单选框)
今天学习的是 选择类控件,它们经常一起出现在表单、问卷或配置界面。
一、QCheckBox(复选框)
1. 概念
QCheckBox 用来表示“是否选中”的状态,可以有多个同时选中。
例如:兴趣爱好选择(音乐、运动、阅读)。
状态有三种:
-
未选中(Unchecked)
-
选中(Checked)
-
半选中(PartiallyChecked,可选,可用于多层选择树结构)
2. 常见方法
-
setChecked(True/False):设置选中状态。 -
isChecked():获取当前是否被选中。 -
信号
stateChanged:当状态改变时触发(返回 0/2)。
3. 示例代码
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QCheckBox
class CheckBoxDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("day06 - checkbox demo")
self.resize(300,200)
layout = QVBoxLayout()
self.lable = QLabel("请选择你的兴趣爱好:", self)
layout.addWidget(self.lable)
self.cb_music = QCheckBox("音乐")
self.cb_sport = QCheckBox("篮球")
self.cb_drink = QCheckBox("茶")
layout.addWidget(self.cb_drink)
layout.addWidget(self.cb_music)
layout.addWidget(self.cb_sport)
# 添加信号槽
self.cb_drink.stateChanged.connect(self.update_hobby)
self.cb_music.stateChanged.connect(self.update_hobby)
self.cb_sport.stateChanged.connect(self.update_hobby)
self.setLayout(layout)
def update_hobby(self):
select = []
if self.cb_drink.isChecked():
select.append(self.cb_drink.text())
if self.cb_music.isChecked():
select.append(self.cb_music.text())
if self.cb_sport.isChecked():
select.append(self.cb_sport.text())
if select:
self.lable.setText("你选择了" + "、".join(select))
else:
self.lable.setText(f"你没有做任何选择!")
# 程序入口
if __name__ == "__main__":
app = QApplication(sys.argv)
demo = CheckBoxDemo()
demo.show()
sys.exit(app.exec())
运行效果如下:

二、QRadioButton(单选框)
1. 概念
QRadioButton 用来表示一组互斥的选项,只能选一个。
例如:性别选择(男/女)。
如果想实现“只能选一个”,需要把它们放在同一个布局或 QButtonGroup 里。
2. 常见方法
-
setChecked(True):设置默认选中。 -
isChecked():判断是否被选中。 -
信号
toggled:当按钮被选中/取消时触发。
3. 示例代码
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QRadioButton
class RadioButtonDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("day06 - RadioButton Demo")
self.resize(200,100)
layout = QVBoxLayout()
self.label = QLabel("请选择你的性别:", self)
layout.addWidget(self.label)
radio_layout = QHBoxLayout()
self.ra_male = QRadioButton("男")
self.ra_female = QRadioButton("女")
radio_layout.addWidget(self.ra_male)
radio_layout.addWidget(self.ra_female)
self.ra_male.toggled.connect(self.update_text)
self.ra_female.toggled.connect(self.update_text)
self.ra_male.setChecked(True)
layout.addLayout(radio_layout)
self.setLayout(layout)
def update_text(self):
if self.ra_male.isChecked():
self.label.setText("你选择了男性")
elif self.ra_female.isChecked():
self.label.setText("你选择了女性")
if __name__ == "__main__":
app = QApplication(sys.argv)
demo = RadioButtonDemo()
demo.show()
sys.exit(app.exec())
运行后的效果如下:

练习任务:做一个 “注册信息选择表单”
-
上面:性别选择(
QRadioButton)。 -
下面:兴趣爱好选择(
QCheckBox)。 -
点击提交按钮时:弹出一个
QMessageBox,显示选择的性别和爱好。
import sys
from PyQt6.QtWidgets import (QApplication, QLabel, QVBoxLayout, QHBoxLayout, QRadioButton,
QWidget, QCheckBox, QPushButton, QMessageBox)
class FormDemo(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("day06 - 表单提交")
self.resize(300, 300)
layout = QVBoxLayout()
self.gender_label = QLabel("请选择性别:", self)
layout.addWidget(self.gender_label)
gender_layout = QHBoxLayout()
self.ra_male = QRadioButton("男")
self.ra_female = QRadioButton("女")
gender_layout.addWidget(self.ra_male)
gender_layout.addWidget(self.ra_female)
layout.addLayout(gender_layout)
self.hobby_label = QLabel("请选择你的爱好:", self)
layout.addWidget(self.hobby_label)
self.cb_music = QCheckBox("音乐")
self.cb_read = QCheckBox("读书")
self.cb_sport = QCheckBox("运动")
self.cb_tv = QCheckBox("看电视")
self.cb_movie = QCheckBox("刷视频")
layout.addWidget(self.cb_movie)
layout.addWidget(self.cb_music)
layout.addWidget(self.cb_read)
layout.addWidget(self.cb_sport)
layout.addWidget(self.cb_tv)
self.button = QPushButton("提交")
self.button.clicked.connect(self.on_submit)
layout.addWidget(self.button)
self.setLayout(layout)
def on_submit(self):
gender = "男" if self.ra_male.isChecked() else "女"
hobby_select = []
if self.cb_movie.isChecked():
hobby_select.append(self.cb_movie.text())
if self.cb_music.isChecked():
hobby_select.append(self.cb_music.text())
if self.cb_read.isChecked():
hobby_select.append(self.cb_read.text())
if self.cb_sport.isChecked():
hobby_select.append(self.cb_sport.text())
if self.cb_tv.isChecked():
hobby_select.append(self.cb_tv.text())
hobby_text = "、".join(hobby_select) if hobby_select else "没有选择兴趣爱好"
msg = QMessageBox()
msg.setWindowTitle("注册信息")
msg.setText(f"你的性别是:{gender},你的兴趣爱好是:{hobby_text}")
msg.setStandardButtons(QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel)
result = msg.exec()
if result == QMessageBox.StandardButton.Ok:
print("表单提交成功")
QApplication.exit()
else:
print("取消表单提交")
if __name__ == "__main__":
app = QApplication(sys.argv)
demo = FormDemo()
demo.show()
sys.exit(app.exec())
运行效果:
-
用户选择性别(男/女)。
-
用户勾选兴趣爱好(音乐/运动/阅读)。
-
点击提交,弹出一个
QMessageBox显示用户选择的性别和兴趣爱好。

您的资助是我最大的动力!
金额随意,欢迎来赏!

浙公网安备 33010602011771号