PySide - 循环中的组单选按钮
PySide - Group radioButton in a loop
我在尝试将循环生成的 radioButton 组合在一起时遇到问题,这样每一行都有一个 buttonGroup 并且可以单独检查。
这是我的代码的精简版:
def ui_layout(self):
self.main_layout = QVBoxLayout()
self.setLayout(self.main_layout)
attrs = ['a', 'b']
for attr in attrs:
buttonGroup = QButtonGroup()
self.attr_layout = QHBoxLayout()
self.main_layout.addLayout(self.attr_layout)
self.rb1 = QRadioButton('{}_rb1'.format(attr))
self.attr_layout.addWidget(self.rb1)
buttonGroup.addButton(self.rb1)
self.rb2 = QRadioButton('{}_rb2'.format(attr))
self.attr_layout.addWidget(self.rb2)
buttonGroup.addButton(self.rb2)
我得到的是这个:
如果您想尝试一下,这里是完整的代码:https://pastebin.com/3vJ4DXER
试一试:
import sys
from PyQt5.QtWidgets import (QRadioButton, QVBoxLayout, QHBoxLayout,
QButtonGroup, QApplication, QWidget)
class Window(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.main_layout = QVBoxLayout()
self.setLayout(self.main_layout)
attrs = ['a', 'b']
self.buttonGroup = ['a', 'b']
for i, attr in enumerate(attrs):
self.buttonGroup[i] = QButtonGroup()
self.attr_layout = QHBoxLayout()
self.main_layout.addLayout(self.attr_layout)
self.rb1 = QRadioButton('{}_rb1'.format(attr))
self.attr_layout.addWidget(self.rb1)
self.buttonGroup[i].addButton(self.rb1)
self.rb2 = QRadioButton('{}_rb2'.format(attr))
self.attr_layout.addWidget(self.rb2)
self.buttonGroup[i].addButton(self.rb2)
self.buttonGroup[i].buttonClicked.connect(self.check_button)
def check_button(self, radioButton):
print("radioButton-> `{}`".format(radioButton.text()))
app = QApplication(sys.argv)
a_window = Window()
a_window.show()
sys.exit(app.exec_())
我在尝试将循环生成的 radioButton 组合在一起时遇到问题,这样每一行都有一个 buttonGroup 并且可以单独检查。
这是我的代码的精简版:
def ui_layout(self):
self.main_layout = QVBoxLayout()
self.setLayout(self.main_layout)
attrs = ['a', 'b']
for attr in attrs:
buttonGroup = QButtonGroup()
self.attr_layout = QHBoxLayout()
self.main_layout.addLayout(self.attr_layout)
self.rb1 = QRadioButton('{}_rb1'.format(attr))
self.attr_layout.addWidget(self.rb1)
buttonGroup.addButton(self.rb1)
self.rb2 = QRadioButton('{}_rb2'.format(attr))
self.attr_layout.addWidget(self.rb2)
buttonGroup.addButton(self.rb2)
我得到的是这个:
如果您想尝试一下,这里是完整的代码:https://pastebin.com/3vJ4DXER
试一试:
import sys
from PyQt5.QtWidgets import (QRadioButton, QVBoxLayout, QHBoxLayout,
QButtonGroup, QApplication, QWidget)
class Window(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.main_layout = QVBoxLayout()
self.setLayout(self.main_layout)
attrs = ['a', 'b']
self.buttonGroup = ['a', 'b']
for i, attr in enumerate(attrs):
self.buttonGroup[i] = QButtonGroup()
self.attr_layout = QHBoxLayout()
self.main_layout.addLayout(self.attr_layout)
self.rb1 = QRadioButton('{}_rb1'.format(attr))
self.attr_layout.addWidget(self.rb1)
self.buttonGroup[i].addButton(self.rb1)
self.rb2 = QRadioButton('{}_rb2'.format(attr))
self.attr_layout.addWidget(self.rb2)
self.buttonGroup[i].addButton(self.rb2)
self.buttonGroup[i].buttonClicked.connect(self.check_button)
def check_button(self, radioButton):
print("radioButton-> `{}`".format(radioButton.text()))
app = QApplication(sys.argv)
a_window = Window()
a_window.show()
sys.exit(app.exec_())