当前位置:首页>python>34.Python实战__按钮组简介

34.Python实战__按钮组简介

  • 2026-10-11 07:10:24
34.Python实战__按钮组简介
    前面聊了聊单选按钮,单选按钮就是只能选择一个,那么问题来了,如果我有多个单项选择题,各个题目间都是相互独立的,如果使用单选按钮,就只能选择一个题目,其它题目就无法选择了怎么办?
像下面这种情况,只能选择一个题目
    那像这种单项选择题,要怎么解决上面的问题呢,就有一种控件,专门为这种情况面设置的,那就是按钮组 QButtonGroup;原理如下:
1)把互斥的单选按钮放置在一个按钮组中;
2)各个按钮组之间并不互斥;
例如:创建单选按钮1、2
radio_btn01 = QRadioButton("男")
radio_btn02 = QRadioButton("女")
btn_group01 = QButtonGroup( )
# 向按钮组中添加单选按钮
btn_group01.addButton (radio_btn01, 1 )
btn_group02.addButton (radio_btn01, 2 )
# 上面1 是为每个按钮设置一个 id值
可以通过 btn_group01.checkedId()来判断哪个按钮被选择了;
① 如果 值为1,就是“男”被选择了;
② 如果 值为2,就是“女”被选择了;
③ 如果没有选择任何选项:返回值为 -1 ;
代码效果如下
附代码如下:
一、还是先导入用到的类
from PySide6.QtCore import Qtfrom PySide6.QtWidgets import QWidget, QApplication, QPushButton,      QLabel, QRadioButton, QButtonGroup, QGridLayout
二、创建一个类Btn(QWidget)继承自QWidget
class 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()
三、在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)
四、创建查询按钮的槽函数query
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值来查询按钮组中那个选项被选中了。

最新文章

随机文章