我使用下面的代码动态创建一组单选按钮:
self.wPaymantType.qgbSomeSelectionGroup = QtGui.QGroupBox()
vbox = QtGui.QVBoxLayout()
for row in listOfChoices:
radio = QtGui.QRadioButton(row)
if bIsFirst:
radio.setChecked(True)
bIsFirst = False
if len(row.name) > nMaxLen:
nMaxLen = len(row.name)
vbox.addWidget(radio)
self.wPaymantType.qgbSomeSelectionGroup.setLayout(vbox)
我如何遍历所有单选按钮以找出选中的单选按钮?
我试过这样的东西,但没有得到任何好处:
qvbl = self.qgbSomeSelectionGroup.children()[0]
for i in range(0, qvbl.count()):
child = qvbl.itemAt(i)
radio = QtGui.QRadioButton(child.widget())
if radio != None:
if radio.isChecked():
print "radio button num " + str(i) + " is checked"
我想识别选中哪个按钮的更好方法是使用QButtonGroup,因为它提供了一个容器来组织按钮小部件组。它不是一个可视化对象,因此它不能用布局来代替可视化地排列单选按钮,但是它允许您使它们互斥,并将整数“id”与它们关联起来,让您知道哪个被选中,而不需要遍历布局中的所有小部件。
如果你决定使用它,你的代码应该变成这样:
要识别选中的按钮,可以使用QButtonGroup的checkedd方法:
或者,如果要检索button对象本身,可以使用checkedButton方法:
你的代码并不是最小的和自包含的,所以很难帮助你——但是我已经做了一些努力,建立了一个接近最小的自包含的近似值来描述你正在尝试做什么,哪些看起来工作正常——来了……:
这似乎是你想要的。关键的改变是保留实际的Python小部件对象,而不是试图从布局vbox中恢复它们——这种尝试似乎没有按预期工作,至少在正确访问有关是否选中给定单选按钮的关键细节方面,这当然是Q的核心
我认为它不起作用的原因是你
如果选中了复选框,请调用要检查的代码。我认为您要做的是将子对象类型转换为QtGui.QRadioButton,在这种情况下不起作用。相反,您应该创建一个新的小部件。试着把它改成smth。像这样:
上面的代码应该遍历布局对象的子对象,检查它们的类型并打印“单选按钮…”,以防它是单选按钮并且被选中
希望这有帮助,问候
相关问题 更多 >
编程相关推荐