本文分享一个分组框功能,采用pyqt6里的QGroupBox控件,效果如下:性别和专业分开为两个分组框内:
1 功能实现思路
ui页面布局设计
性别和专业要设计成两个分组框:
逻辑实现
引入信号和槽函数来实现点击单选按钮实现信号的触发,在控制台输出对应的内容。
2 UI代码部分
#分别创建两个性别单选按钮self.rbNan=QRadioButton('男',self)self.rbNv=QRadioButton('女',self)
#专业创建四个单选按钮self.rbJsj=QRadioButton('计算机',self)self.rbRjgc=QRadioButton('软件工程',self)self.rbTxgc=QRadioButton('通信工程',self)self.rbRgzn=QRadioButton('人工智能',self)
接下来把分别把性别和专业放到水平布局控件里:
#创建两个内水平布局、1个外垂直布局self.hLayout1=QHBoxLayout()self.hLayout2=QHBoxLayout()#两个性别单选按钮加入内水平布局 1self.hLayout1.addWidget(self.rbNan)self.hLayout1.addWidget(self.rbNv)#4个专业选项按钮加入内水平布局 2self.hLayout2.addWidget(self.rbJsj)self.hLayout2.addWidget(self.rbRjgc)self.hLayout2.addWidget(self.rbTxgc)self.hLayout2.addWidget(self.rbRgzn)
之后创建两个分组框,分别对应性别和专业:
#创建性别和专业单选按钮组self.gBox1=QGroupBox('性别',self)self.gBox2=QGroupBox('专业',self)
到这里,页面布局已经设计好了,后面开始实现功能。
#性别信号抽发点self.rbNv.toggled.connect(self.rbNxxFunc)#对应的槽函数 def rbNxxFunc(self):if self.rbNan.isChecked():print("男")else:print("女")
#将专业列表项中每一个单选按钮关联它们共同的槽函数rbListFuncself.list=[self.rbJsj,self.rbRjgc,self.rbTxgc,self.rbRgzn][rb.clicked.connect(self.rbListFunc) for rb in self.list]#对应的槽函数def rbListFunc(self):for rb in self.list:if rb.isChecked():print(rb.text())
到此,基本上所有的功能就实现了。
3 完整代码
# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 分组框.py
Description:
Author: lzq
date:2024-07-28 16:25
------------------------------------------------
"""
import sys
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QRadioButton, QHBoxLayout, \QGroupBoxclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.setWindowTitle("分组框")self.rbJsj=QRadioButton('计算机',self)self.rbRjgc=QRadioButton('软件工程',self)self.rbTxgc=QRadioButton('通信工程',self)self.rbRgzn=QRadioButton('人工智能',self)#将列表项中每一个单选按钮关联它们共同的槽函数rbListFuncself.list=[self.rbJsj,self.rbRjgc,self.rbTxgc,self.rbRgzn][rb.clicked.connect(self.rbListFunc) for rb in self.list]#分别创建两个性别单选按钮self.rbNan=QRadioButton('男',self)self.rbNv=QRadioButton('女',self)self.rbNv.toggled.connect(self.rbNxxFunc)#女单选按钮关联槽函数 rbNxxFunc#创建两个内水平布局、1个外垂直布局self.hLayout1=QHBoxLayout()self.hLayout2=QHBoxLayout()self.vLayout =QVBoxLayout()self.layout_init()def layout_init(self):#两个性别单选按钮加入内水平布局 1self.hLayout1.addWidget(self.rbNan)self.hLayout1.addWidget(self.rbNv)#4个专业选项按钮加入内水平布局 2self.hLayout2.addWidget(self.rbJsj)self.hLayout2.addWidget(self.rbRjgc)self.hLayout2.addWidget(self.rbTxgc)self.hLayout2.addWidget(self.rbRgzn)#创建性别和专业单选按钮组self.gBox1=QGroupBox('性别',self)self.gBox2=QGroupBox('专业',self)self.gBox1.setLayout(self.hLayout1)self.gBox2.setLayout(self.hLayout2)self.vLayout.addWidget(self.gBox1)self.vLayout.addWidget(self.gBox2)self.rbNv.setChecked(True)self.setLayout(self.vLayout)def rbListFunc(self):for rb in self.list:if rb.isChecked():print(rb.text())def rbNxxFunc(self):if self.rbNan.isChecked():print("男")else:print("女")if __name__=='__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())
自己可以尝试一下!很好玩的。