本文分享一个分组框功能,采用pyqt6里的QGroupBox控件,效果如下:性别和专业分开为两个分组框内:


入门 PyQt6 看过来(案例)14~ 分组_开发语言

1 功能实现思路

ui页面布局设计

性别和专业要设计成两个分组框:

入门 PyQt6 看过来(案例)14~ 分组_python_02


逻辑实现

引入信号和槽函数来实现点击单选按钮实现信号的触发,在控制台输出对应的内容。

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()
	
		#两个性别单选按钮加入内水平布局 1
        self.hLayout1.addWidget(self.rbNan)
        self.hLayout1.addWidget(self.rbNv)

        #4个专业选项按钮加入内水平布局 2
        self.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("女")
#将专业列表项中每一个单选按钮关联它们共同的槽函数rbListFunc
    self.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, \
    QGroupBox


class 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)

        #将列表项中每一个单选按钮关联它们共同的槽函数rbListFunc
        self.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):
        #两个性别单选按钮加入内水平布局 1
        self.hLayout1.addWidget(self.rbNan)
        self.hLayout1.addWidget(self.rbNv)

        #4个专业选项按钮加入内水平布局 2
        self.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())

自己可以尝试一下!很好玩的。


本文到此结束,有本事你就别点赞,别关注我。路老师一生清贫,上有老下有小,让我一个人默默的付出吧!