PyQt5的QRadioButton的使用

QRadioButton小部件提供了一个带有文本标签的单选按钮(本质上它还是一个按钮)。QRadioButton是一个选项按钮,可以打开(选中)或关闭(取消选中)。单选按钮通常为用户提供“多选一”操作。多个单选按钮之间是互斥的关系,属于同一个父窗口小部件的单选按钮默认是属于一组的,如果要将多个单选按钮分为多组,就用到了QButtonGroupQGroupBoxQButtonGroup仅仅是一个容器,没有任何视觉表现,并且QButtonGroup提供了比QGroupBox更方便的信号槽操作。当然,如果要显示一些提示信息,用QGroupBox会更合适。下面是它的布局和事件处理例程:

#-*-coding:utf-8-*-

from PyQt5.QtWidgets import QMainWindow,QApplication,QRadioButton,QGroupBox,QVBoxLayout,QWidget,QHBoxLayout,QButtonGroup,QLabel

import sys

 

class RadioRuttonDemo(QMainWindow):

    def __init__(self):

        super().__init__()

        self.initUI()

 

    def initUI(self):

        self.statusBar()

        language_gb = QGroupBox("请选择您喜欢的语言:")     #定义一个容器

        vbllayout = QVBoxLayout()                   

        self.python_rb = QRadioButton("Python",language_gb)

        vbllayout.addWidget(self.python_rb,11)

        self.cplus_rb = QRadioButton("C++",language_gb)

        vbllayout.addWidget(self.cplus_rb,12)

        self.vb_rb = QRadioButton("Visual Basic",language_gb)

        vbllayout.addWidget(self.vb_rb,13)

        self.java_rb = QRadioButton("Java",language_gb)

        vbllayout.addWidget(self.java_rb,14)

        language_gb.setLayout(vbllayout)                 #定义GroupBox的布局管理器

        self.languagelist =[self.python_rb,self.cplus_rb,self.vb_rb,self.java_rb]

        self.java_rb.setChecked(True)                    #设置默认的选项

        self.languageconnect()                           #调用函数

 

        lb1 = QLabel("请选择您喜欢的球类运动:")        #用标签显示提示信息

        self.bg_ball = QButtonGroup()                     #创建一个按钮组

        self.baseketball_rb = QRadioButton("篮球",self)

        self.volleyball_rb = QRadioButton("排球",self)

        self.football_rb = QRadioButton("足球",self)

        self.badminton_rb = QRadioButton("羽毛球",self)

        self.football_rb.setChecked(True)                   #设置默认选中项

        self.bg_ball.addButton(self.baseketball_rb,21)

        self.bg_ball.addButton(self.volleyball_rb,22)

        self.bg_ball.addButton(self.football_rb,23)

        self.bg_ball.addButton(self.badminton_rb,24)

        hblayout = QHBoxLayout()                        #设置四个选项的布局管理

        hblayout.addWidget(self.baseketball_rb)

        hblayout.addWidget(self.volleyball_rb)

        hblayout.addWidget(self.football_rb)

        hblayout.addWidget(self.badminton_rb)

        vlayout = QVBoxLayout()

        vlayout.addWidget(lb1)                 

        vlayout.addLayout(hblayout)       

        self.bg_ball.buttonClicked.connect(self.balldo)     #按钮组事件与函数关联

 

        mainvblayout = QVBoxLayout()

        mainvblayout.addWidget(language_gb)

        mainvblayout.addLayout(vlayout)

 

        main_frame = QWidget()              #此窗格作为以上诸控件的容器

        main_frame.setLayout(mainvblayout)

        self.setCentralWidget(main_frame)      #将窗格放在mainwindow的中间

       

        self.statusBar()

        self.setGeometry(100,100,300,250)

        self.setWindowTitle("单选按钮示例")

        self.show()

       

    def languageconnect(self):

        for rb in self.languagelist:

            rb.clicked.connect(self.languagedo)

 

    def languagedo(self):       

        sender = self.sender()

        if sender == self.python_rb:

            self.statusBar().showMessage('Python')

        elif sender == self.cplus_rb:

            self.statusBar().showMessage('C++')

        elif sender == self.vb_rb:

            self.statusBar().showMessage('Visual Basic')

        elif sender == self.java_rb:

            self.statusBar().showMessage('Java')

 

    def balldo(self):

        if self.bg_ball.checkedId() == 21:

            self.statusBar().showMessage('你喜欢玩篮球')

        elif self.bg_ball.checkedId() == 22:

            self.statusBar().showMessage('你喜欢玩排球')

        elif self.bg_ball.checkedId() == 23:

            self.statusBar().showMessage('你喜欢踢足球')

        elif self.bg_ball.checkedId() == 24:

            self.statusBar().showMessage('你喜欢打羽毛球')

               

if __name__ == "__main__":

    app = QApplication(sys.argv)

    rb_w = RadioRuttonDemo()

   sys.exit(app.exec_())

   

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值