如何使用QButtonGroup实现状态按钮的管理?

2026-05-16 15:111阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计892个文字,预计阅读时间需要4分钟。

如何使用QButtonGroup实现状态按钮的管理?

参考文档:[PySide6.QtWidgets.QButtonGroup](https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QButtonGroup.)

QButtonGroup的作用:这是一个抽象容器,允许将按钮分组,以便可以同时管理一组按钮的状态。当其中一个按钮被选中时,组中的其他按钮将被自动取消选中。

详细描述:- 这是一个抽象类,因此不能直接实例化。- 当按钮组中的按钮被选中时,其他按钮会自动被取消选中,这有助于确保用户只能从一组选项中选择一个。- 通常用于创建单选按钮组,例如在表单中选择一个选项。

参考文档:​​doc.qt.io/qtforpython-6/PySide6/QtWidgets/QButtonGroup.html​​

QButtonGroup的作用

从文档的详细描述中可以得到以下信息:

  • 这是一个抽象的容器,当中可以放到一些​​按钮小部件​​
  • 它只是管理按钮的状态,不负责显示
  • 通过​​exclusive​​​属性可以设置,​​QButtonGroup​​​是否只能有一个按钮为选中状态,默认为​​True​​
  • 可以通过​​setId(btn, id)​​​函数为容器中的按钮关联一个整数,通过​​id(btn)​​获取关联的id.
  • ​​checkButton()​​​或以获取被选中的按钮(只能返回一个,所以只能用于​​exclusive == True​​​的情况),​​checkedId​​获得选中按钮的id.
  • ​​buttons​​函数可以返回容器器中的按钮。

QButtonGroup一般用于管理以下三种按钮:

  • ​​QPushButton​​​它的属性​​checkable == Ture​​​时,即它的实例调用了​​setCheckable(True)​​函数
  • ​​QRadioButton​​
  • ​​QCheckBox​​

独占示例

from PySide6.QtWidgets import QApplication,\
QWidget, QVBoxLayout, QHBoxLayout,\
QRadioButton, QLabel, QButtonGroup, \
QPushButton


class Window(QWidget):
def __init__(self):
super().__init__()
self.__set_up_ui()

def __set_up_ui(self):
v_box = QVBoxLayout(self)
v_box.addWidget(QLabel("你的职业是:"))
h_box = QHBoxLayout()
v_box.addLayout(h_box)
lst = [
QRadioButton("程序员"),
QRadioButton("程序媛"),
QRadioButton("程序猿"),
]
qbg = QButtonGroup(self)
self.qgb = qbg
_id = 1 for qrb in lst:
h_box.addWidget(qrb)
qbg.addButton(qrb, _id)
_id += 1
btn = QPushButton("获取职业")
btn.clicked.connect(lambda: print(self.qgb.checkedId()))
v_box.addWidget(btn)


app = QApplication([])
w = Window()
w.show()
app.exec()

非独占式

调用以下函数,使其成为非独占式。

qbg.setExclusive(False)

相应的​​QRadioButton​​改为:

lst = [
QCheckBox("程序员"),
QCheckBox("程序媛"),
QCheckBox("程序猿"),]

如何使用QButtonGroup实现状态按钮的管理?

为了能获取选中的项,我们需要遍历​​buttons()​​判断按钮状态

class CheckBoxGroup(QButtonGroup):
def checkedId(self) -> list[int]:
lst = []
for btn in self.buttons():
if btn.isChecked():
lst.append(self.id(btn))

return lst

​​CheckBoxGroup重载了checkedId​​

完整代码如下:

from PySide6.QtWidgets import QApplication, QWidget, \
QVBoxLayout, QHBoxLayout, QLabel, QButtonGroup, \
QPushButton, QCheckBox


class CheckBoxGroup(QButtonGroup):
def checkedId(self) -> list[int]:
lst = []
for btn in self.buttons():
if btn.isChecked():
lst.append(self.id(btn))

return lst


class Window(QWidget):
def __init__(self):
super().__init__()
self.__set_up_ui()

def __set_up_ui(self):
v_box = QVBoxLayout(self)
v_box.addWidget(QLabel("你的职业是:"))
h_box = QHBoxLayout()
v_box.addLayout(h_box)
lst = [
QCheckBox("程序员"),
QCheckBox("程序媛"),
QCheckBox("程序猿"),
]
qbg = CheckBoxGroup(self)
qbg.setExclusive(False)
self.qgb = qbg
_id = 1
for qrb in lst:
h_box.addWidget(qrb)
qbg.addButton(qrb, _id)
_id += 1


btn = QPushButton("获取职业")
btn.clicked.connect(lambda: print(self.qgb.checkedId()))
v_box.addWidget(btn)


app = QApplication([])
w = Window()
w.show()
app.exec()


本文共计892个文字,预计阅读时间需要4分钟。

如何使用QButtonGroup实现状态按钮的管理?

参考文档:[PySide6.QtWidgets.QButtonGroup](https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QButtonGroup.)

QButtonGroup的作用:这是一个抽象容器,允许将按钮分组,以便可以同时管理一组按钮的状态。当其中一个按钮被选中时,组中的其他按钮将被自动取消选中。

详细描述:- 这是一个抽象类,因此不能直接实例化。- 当按钮组中的按钮被选中时,其他按钮会自动被取消选中,这有助于确保用户只能从一组选项中选择一个。- 通常用于创建单选按钮组,例如在表单中选择一个选项。

参考文档:​​doc.qt.io/qtforpython-6/PySide6/QtWidgets/QButtonGroup.html​​

QButtonGroup的作用

从文档的详细描述中可以得到以下信息:

  • 这是一个抽象的容器,当中可以放到一些​​按钮小部件​​
  • 它只是管理按钮的状态,不负责显示
  • 通过​​exclusive​​​属性可以设置,​​QButtonGroup​​​是否只能有一个按钮为选中状态,默认为​​True​​
  • 可以通过​​setId(btn, id)​​​函数为容器中的按钮关联一个整数,通过​​id(btn)​​获取关联的id.
  • ​​checkButton()​​​或以获取被选中的按钮(只能返回一个,所以只能用于​​exclusive == True​​​的情况),​​checkedId​​获得选中按钮的id.
  • ​​buttons​​函数可以返回容器器中的按钮。

QButtonGroup一般用于管理以下三种按钮:

  • ​​QPushButton​​​它的属性​​checkable == Ture​​​时,即它的实例调用了​​setCheckable(True)​​函数
  • ​​QRadioButton​​
  • ​​QCheckBox​​

独占示例

from PySide6.QtWidgets import QApplication,\
QWidget, QVBoxLayout, QHBoxLayout,\
QRadioButton, QLabel, QButtonGroup, \
QPushButton


class Window(QWidget):
def __init__(self):
super().__init__()
self.__set_up_ui()

def __set_up_ui(self):
v_box = QVBoxLayout(self)
v_box.addWidget(QLabel("你的职业是:"))
h_box = QHBoxLayout()
v_box.addLayout(h_box)
lst = [
QRadioButton("程序员"),
QRadioButton("程序媛"),
QRadioButton("程序猿"),
]
qbg = QButtonGroup(self)
self.qgb = qbg
_id = 1 for qrb in lst:
h_box.addWidget(qrb)
qbg.addButton(qrb, _id)
_id += 1
btn = QPushButton("获取职业")
btn.clicked.connect(lambda: print(self.qgb.checkedId()))
v_box.addWidget(btn)


app = QApplication([])
w = Window()
w.show()
app.exec()

非独占式

调用以下函数,使其成为非独占式。

qbg.setExclusive(False)

相应的​​QRadioButton​​改为:

lst = [
QCheckBox("程序员"),
QCheckBox("程序媛"),
QCheckBox("程序猿"),]

如何使用QButtonGroup实现状态按钮的管理?

为了能获取选中的项,我们需要遍历​​buttons()​​判断按钮状态

class CheckBoxGroup(QButtonGroup):
def checkedId(self) -> list[int]:
lst = []
for btn in self.buttons():
if btn.isChecked():
lst.append(self.id(btn))

return lst

​​CheckBoxGroup重载了checkedId​​

完整代码如下:

from PySide6.QtWidgets import QApplication, QWidget, \
QVBoxLayout, QHBoxLayout, QLabel, QButtonGroup, \
QPushButton, QCheckBox


class CheckBoxGroup(QButtonGroup):
def checkedId(self) -> list[int]:
lst = []
for btn in self.buttons():
if btn.isChecked():
lst.append(self.id(btn))

return lst


class Window(QWidget):
def __init__(self):
super().__init__()
self.__set_up_ui()

def __set_up_ui(self):
v_box = QVBoxLayout(self)
v_box.addWidget(QLabel("你的职业是:"))
h_box = QHBoxLayout()
v_box.addLayout(h_box)
lst = [
QCheckBox("程序员"),
QCheckBox("程序媛"),
QCheckBox("程序猿"),
]
qbg = CheckBoxGroup(self)
qbg.setExclusive(False)
self.qgb = qbg
_id = 1
for qrb in lst:
h_box.addWidget(qrb)
qbg.addButton(qrb, _id)
_id += 1


btn = QPushButton("获取职业")
btn.clicked.connect(lambda: print(self.qgb.checkedId()))
v_box.addWidget(btn)


app = QApplication([])
w = Window()
w.show()
app.exec()