QButtonGroup管理状态按钮(qbuttongroup 全不选)

网友投稿 495 2022-08-22


QButtonGroup管理状态按钮(qbuttongroup 全不选)

参考文档:​​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, \ QPushButtonclass 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("程序猿"),]

为了能获取选中的项,我们需要遍历​​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, QCheckBoxclass CheckBoxGroup(QButtonGroup): def checkedId(self) -> list[int]: lst = [] for btn in self.buttons(): if btn.isChecked(): lst.append(self.id(btn)) return lstclass 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()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pyaudio执行获取音频设备列表导致声音卡顿
下一篇:SpringBoot中5种高大上的yml文件读取方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~