from PySide import QtCore
from PySide import QtGui
class UI(QtGui.QDialog):
def __init__(self):
super(UI,self).__init__()
self.setWindowTitle('Test UI 2000')
self.create_layout()
def create_layout(self):
mainLayout = QtGui.QVBoxLayout()
self.setLayout(mainLayout)
fruitLabel = QtGui.QLabel('Fruit')
junkLabel = QtGui.QLabel('Junk')
buttonGroup1 = QtGui.QButtonGroup()
radioButtonA = QtGui.QRadioButton('Apple')
radioButtonB = QtGui.QRadioButton('Pear')
buttonGroup1.addButton(radioButtonA)
buttonGroup1.addButton(radioButtonB)
buttonGroup2 = QtGui.QButtonGroup()
radioButtonC = QtGui.QRadioButton('Hotdog')
radioButtonD = QtGui.QRadioButton('Hamburger')
buttonGroup2.addButton(radioButtonC)
buttonGroup2.addButton(radioButtonD)
mainLayout.addWidget(fruitLabel)
mainLayout.addWidget(radioButtonA)
mainLayout.addWidget(radioButtonB)
mainLayout.addWidget(junkLabel)
mainLayout.addWidget(radioButtonC)
mainLayout.addWidget(radioButtonD)
if __name__ == '__main__':
try:
ui.close()
except:
pass
ui = UI()
ui.setAttribute(QtCore.Qt.WA_DeleteOnClose)
ui.show()
我一直在努力理解为什么在将两组QRadioButtons添加到各自的QButtonGroup之后,它们仍然可以像在同一个父级下一样运行。我需要'水果'QRadioButtons独立于'垃圾'QRadioButtons工作。
根据文档,'如果启用了自动独占(默认情况下是这样),属于同一父窗口小部件的单选按钮的行为就好像它们属于同一个独占按钮组'。
将QRadioButtons添加到QVBoxLayout后,我是否以某种方式覆盖了QButtonGroup?
答案 0 :(得分:1)
我只有PyQt5
可用于测试,但能够用它重现您的问题。
在create_layout
中定义布局时,buttonGroup1
和buttonGroup2
会在返回时被删除。在方法返回后,您需要存储这些变量以使它们存在。例如,可以通过在create_layout
的末尾添加以下内容来完成此操作:
def create_layout(self):
...
self.buttonGroups = buttonGroup1, buttonGroup2