QRadioButton在PyQt中用于给用户提供若干选项中的单选操作,继承自QAbstractButton类。例如性别选项,可选的有“男”和“女”,选择一个时,会自动取消其他的选项,具有排他性。QRadioButton在样式上会有一个圆圈按钮,用于标志用户的选中状态。
QRadioButton的创建和基本设置
- QRadioButton(parent: QWidget = None)
- QRadioButton(str, parent: QWidget = None) : str就是显示的文本
- setIcon(QIcon) :设置图标
- setShortcut():快捷键
当只有一个QRadioButton的时候,可以点击选中以及取消选中,但是有两个及以上的话,就无法通过点击两次来达到取消选中的效果。可以自定尝试体验。
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys
# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)
# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("QRadioButton功能测试") # 标题
window.resize(500, 500) # 窗口的大小
window.move(400, 200) # 窗口初次显示的位置
# 创建其他控件
tb_nan = QRadioButton("男-&Male", window) # &Male,可以听过Alt+M快速定位选中
tb_nan.setShortcut("Alt+M") # 可以听过Alt+M快速定位选中,这是第二种方案
tb_nan.move(100, 100)
tb_nan.setIcon(QIcon("飞机.png"))
tb_nv = QRadioButton("女-&Female", window) # &Female,可以听过Alt+F快速定位选中
tb_nv.move(100, 150)
window.show() # 显示窗口,不然啥也没有
sys.exit(app.exec_())
可用信号
基类QAbstractButton的八大通用按钮功能_QAbstractButton共性特点_PyQt学习笔记(三十一)
单选按钮上面父类的都可以使用。
单选按钮最常用的还是toggled(bool checked)
这个切换信号。
单选按钮默认是具有排他性,但是也可以通过setAutoExclusive(False)
来取消。
排他性,是要求在同一个父控件下有多个同级别的单选按钮才具有。
多组互斥问题
现在加入了多组QRadioButton,想要实现的效果:
目前能解决的办法是设置两个区域父对象,分别作为父对象:
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys
# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)
# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("QRadioButton功能测试") # 标题
window.resize(500, 500) # 窗口的大小
window.move(400, 200) # 窗口初次显示的位置
# 创建其他控件
red = QWidget(window)
red.resize(200, 200)
red.setStyleSheet("background-color: red;")
red.move(50, 50)
tb_nan = QRadioButton("男-&Male", red) # &Male,可以听过Alt+M快速定位选中
tb_nan.setShortcut("Alt+M") # 可以听过Alt+M快速定位选中,这是第二种方案
tb_nan.move(100, 100)
tb_nan.setIcon(QIcon("飞机.png"))
tb_nv = QRadioButton("女-&Female", red) # &Female,可以听过Alt+F快速定位选中
tb_nv.move(100, 150)
green = QWidget(window)
green.resize(200, 200)
green.setStyleSheet("background-color: green;")
green.move(250, 250)
rb_yes = QRadioButton("YES", green)
rb_no = QRadioButton("NO", green)
rb_yes.move(100, 100)
rb_no.move(100, 150)
window.show() # 显示窗口,不然啥也没有
sys.exit(app.exec_())
这显然不是一个比较好的方案,后面会介绍通过按钮组(QButtonGroup)来实现按钮的分类。