PyQt5 QGroupBox结合QRadioBox布局

QGroupBox不仅可以将布局分成一个个区域显示,而且还能起到隔绝环境的作用,例如在pyqt5中,一个界面中的所用QRadioBox只能选中其中一个,但是将QRadioBox分开布局到QGroupBox中去的话,那么每一个QGroupBox中的QRadioBox就是一个整体,每个QGroupBox只能选中一个QRadioBox,如果一个界面中有多个QGroupBox的话就可以同时选中多个QRadioBox了 

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGroupBox, QRadioButton, QHBoxLayout


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()
        '''添加两个QGroupBox'''
        self.groupbox1 = QGroupBox('box1', self)
        self.groupbox2 = QGroupBox('box2', self)
        '''添加6个QRadioButton'''
        self.one = QRadioButton('one', self)
        self.two = QRadioButton('two', self)
        self.radio1 = QRadioButton('radio1', self)
        self.radio2 = QRadioButton('radio2', self)
        self.radio3 = QRadioButton('radio3', self)
        self.radio4 = QRadioButton('radio4', self)   
        '''创建两个列表'''
        self.radio_list = [self.radio1, self.radio2, self.radio3, self.radio4]
        self.fun_list = ['1', '2', '3', '4']
        '''创建3个水平布局'''
        self.hboxL = QHBoxLayout()
        self.hboxR = QHBoxLayout()
        self.hboxAll = QHBoxLayout()
        '''初始化layout_init()函数和radio_init()函数'''
        self.layout_init()
        self.radio_init()
    '''布局初始化函数'''
    def layout_init(self):
        self.hboxL.addWidget(self.one)
        self.hboxL.addWidget(self.two)
        self.groupbox1.setLayout(self.hboxL)
        self.hboxR.addWidget(self.radio1)
        self.hboxR.addWidget(self.radio2)
        self.hboxR.addWidget(self.radio3)
        self.hboxR.addWidget(self.radio4)
        self.groupbox2.setLayout(self.hboxR)
        self.hboxAll.addWidget(self.groupbox1)
        self.hboxAll.addWidget(self.groupbox2)
        self.setLayout(self.hboxAll)
    '''QRadioBox初始化,将名one的QRadioBox初始化为被点击状态'''
    def radio_init(self):
        self.one.setChecked(True)
        for btn in self.radio_list:
            btn.clicked.connect(self.radioFunc)
    '''该函数功能为当rdio1到radio4被点击时,判断此时groupbox1中one和two哪个radio被按下
    然后在判断groupbox2中哪个radio被按下,最后打印对应的被按下的按钮'''
    def radioFunc(self):
        if self.one.isChecked():
            for (I, J) in zip(self.radio_list, self.fun_list): #用一个for循环同时迭代两个列表,即for I in self.radio_list和for J in self.fun_list是同时执行的
                if I.isChecked():
                    print('one '+J+' was clicked')
        elif self.two.isChecked():
            for (I, J) in zip(self.radio_list, self.fun_list):
                if I.isChecked():
                    print('two ' + J + ' was clicked')
        else:
            pass

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

效果:

PyQt5 QGroupBox结合QRadioBox布局_第1张图片

 

你可能感兴趣的:(PyQt5,QRadioBox,QGroupBox,for循环同时迭代两个列表)