单选按钮
QRadioButton小部件提供了一个带有文本标签的单选按钮(本质上它还是一个按钮)。
QRadioButton是一个选项按钮,可以打开(选中)或关闭(取消选中)。单选按钮通常为用户提供“多选一”操作。在一组单选按钮中,一次只能检查一个单选按钮;如果用户选择另一个按钮,则先前选择的按钮被关闭。
单选按钮默认为autoExclusive(自动互斥)。如果启用了自动互斥功能,则属于同一个父窗口小部件的单选按钮的行为就属于同一个互斥按钮组的一部分。当然加入QButtonGroup中能够实现多组单选按钮互斥。
无论何时打开或关闭按钮,都会发出toggled()信号。如果要在每次按钮更改状态时触发某个操作,请连接到此信号。使用isChecked()来查看是否选择了一个特定的按钮。
就像QPushButton一样,单选按钮显示文本,还可以选择一个小图标。该图标是用setIcon()设置的。文本可以在构造函数中设置,也可以在setText()中设置。快捷键可以通过在文本前面加一个&符号来指定。
栗子
from PyQt5.QtWidgets
import QWidget, QRadioButton, QApplication, QPushButton, QMessageBox, QButtonGroup
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.rb11 = QRadioButton(
'你是',self)
self.rb12 = QRadioButton(
'我是',self)
self.rb13 = QRadioButton(
'他是',self)
self.rb21 = QRadioButton(
'大美女',self)
self.rb22 = QRadioButton(
'大帅哥',self)
self.rb23 = QRadioButton(
'小屁孩',self)
bt1 = QPushButton(
'提交',self)
self.resize(
320,
180)
self.setWindowTitle(
'早点毕业吧--单选按钮')
"""
新建6个单选按钮。如果不增加分组,这个6个单选按钮是互斥的,因为单选按钮默认为autoExclusive(自动互斥)。
"""
self.rb11.move(
20,
20)
self.rb12.move(
20,
50)
self.rb13.move(
20,
80)
self.rb21.move(
90,
20)
self.rb22.move(
90,
50)
self.rb23.move(
90,
80)
bt1.move(
20,
120)
"""
将单选按钮添加到分组中,同时分配一个id号
"""
self.bg1 = QButtonGroup(self)
self.bg1.addButton(self.rb11,
11)
self.bg1.addButton(self.rb12,
12)
self.bg1.addButton(self.rb13,
13)
self.bg2 = QButtonGroup(self)
self.bg2.addButton(self.rb21,
21)
self.bg2.addButton(self.rb22,
22)
self.bg2.addButton(self.rb23,
23)
self.info1 =
''
self.info2 =
''
"""
当我们在分组中点击给定按钮的时候会发出buttonClicked()信号,同时我们连接到rbclicked这个槽函数上。
"""
self.bg1.buttonClicked.connect(self.rbclicked)
self.bg2.buttonClicked.connect(self.rbclicked)
bt1.clicked.connect(self.submit)
self.show()
"""
这个就是当我们点击提交按钮的时候,根据self.info1和self.info2的值弹出相应的消息了。
"""
def submit(self):
if self.info1 ==
'' or self.info2 ==
'':
QMessageBox.information(self,
'What?',
'貌似有没有选的啊,快去选一个吧!')
else:
QMessageBox.information(self,
'What?',self.info1+self.info2)
"""
我们判断到底是点了哪个分组,怎么判断?使用self.sender()函数将信号的产生对象送过来。然后根据checkedId()去获得这个按钮的id号,通过id号的判断我们到底是点了哪个单选按钮。
"""
def rbclicked(self):
sender = self.sender()
if sender == self.bg1:
if self.bg1.checkedId() ==
11:
self.info1 =
'你是'
elif self.bg1.checkedId() ==
12:
self.info1 =
'我是'
elif self.bg1.checkedId() ==
13:
self.info1 =
'他是'
else:
self.info1 =
''
else:
if self.bg2.checkedId() ==
21:
self.info2 =
'大美女'
elif self.bg2.checkedId() ==
22:
self.info2 =
'大帅哥'
elif self.bg2.checkedId() ==
23:
self.info2 =
'小屁孩'
else:
self.info2 =
''
if __name__ ==
'__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
具体运行结果参考: https://zhuanlan.zhihu.com/p/30708796 谢谢 “学点编程吧”