前面聊了聊单选按钮,单选按钮就是只能选择一个,那么问题来了,如果我有多个单项选择题,各个题目间都是相互独立的,如果使用单选按钮,就只能选择一个题目,其它题目就无法选择了怎么办? 那像这种单项选择题,要怎么解决上面的问题呢,就有一种控件,专门为这种情况面设置的,那就是按钮组 QButtonGroup;原理如下:radio_btn01 = QRadioButton("男")radio_btn02 = QRadioButton("女")btn_group01 = QButtonGroup( )btn_group01.addButton (radio_btn01, 1 )btn_group02.addButton (radio_btn01, 2 )可以通过 btn_group01.checkedId()来判断哪个按钮被选择了;from PySide6.QtCore import Qtfrom PySide6.QtWidgets import QWidget, QApplication, QPushButton, QLabel, QRadioButton, QButtonGroup, QGridLayout
二、创建一个类Btn(QWidget)继承自QWidgetclass Btn(QWidget): def __init__(self): super().__init__() # 设置窗口标题 self.setWindowTitle("按钮组") # 设置窗口尺寸宽500,高350 self.resize(500, 350) # 设置样式表,可跳过,后面再聊 self.setStyleSheet(""" QWidget { background-color: lightblue; font-size: 20px;} QPushButton { background-color: lightskyblue; } """) # 创建网格布局为主布局 self.main_layout = QGridLayout() # 设置网格布局为主布局 self.setLayout(self.main_layout) self.main_layout.setAlignment(Qt.AlignTop) # 设置布局的水平和垂直间隔距离20 self.main_layout.setSpacing(20) # 设置(左,上,右,下)的内容边距 self.main_layout.setContentsMargins(20, 20, 10, 10) # 创建一个实际方法 setup_01()在里面创建控件 self.setup_01()
def setup_01(self): # 创建单选题一 label_1 = QLabel("1、请选择你的性别:") radio_btn1 = QRadioButton("男") radio_btn2 = QRadioButton("女") # 创建按钮组1,并添加二个单选按钮 self.btn_group_1 = QButtonGroup() self.btn_group_1.addButton(radio_btn1, 1) # 1 对应 男 self.btn_group_1.addButton(radio_btn2, 2) # 2 对应 女 # 创建单选题目二 label_2 = QLabel("2、你是否成年人:") radio_btn3 = QRadioButton("是") radio_btn4 = QRadioButton("否") # 创建按钮组2,并添加二个单选按钮 self.btn_group_2 = QButtonGroup() self.btn_group_2.addButton(radio_btn3, 1) # id值 1 对应 是 self.btn_group_2.addButton(radio_btn4, 2) # id值 2 对应 否 # 把控件添加到主布局中 # 把题目一添加到布局 self.main_layout.addWidget(label_1, 0, 0, 1, -1) self.main_layout.addWidget(radio_btn1, 1, 0) self.main_layout.addWidget(radio_btn2, 1, 1) # 把题目二添加到布局 self.main_layout.addWidget(label_2, 2, 0, 1, -1) self.main_layout.addWidget(radio_btn3, 3, 0) self.main_layout.addWidget(radio_btn4, 3, 1) # 创建一个按钮来查看,每个按钮组的选择内容 btn = QPushButton("查询选择结果") btn.clicked.connect(self.query) self.label_2 = QLabel() self.main_layout.addWidget(btn, 4, 0, 1, -1) self.main_layout.addWidget(self.label_2, 5, 0, 1, -1)
def query(self): # 查询按钮组1被选中项目的id值 self.label_2.setText(f"按钮组1 被选中项目的 ID值为 {self.btn_group_1.checkedId()}\n" f"按钮组2 被选中项目的 ID值为 {self.btn_group_2.checkedId()}") self.label_2.setAlignment(Qt.AlignCenter)
if __name__ == "__main__": import sys app = QApplication(sys.argv) win = Btn() win.show() sys.exit(app.exec())
建议大家还是要新手敲一遍,理解下按钮组的用法,并知道如何利用id值来查询按钮组中那个选项被选中了。