我遇到了这种创建UI的风格,并且认为我已经尝试了一些单选按钮。
基本上我创建了两个功能 - testButtons01Group
和testButtons02Group
,每个功能可以满足3个单选按钮。但是我原本以为我会期待一些错误,如果我点击Grp02
按钮,看到我在相同的约定中命名了所有6个单选按钮,但它仍然按照正常工作。
为什么会这样? 另外,只是想知道我写的这种代码风格,它是否可行,还是会造成任何混淆?
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class mainWindow(QDialog):
def __init__(self, parent=None):
super(mainWindow, self).__init__(parent)
grid = QGridLayout()
grid.addWidget(self.testButtons01Group(), 1, 0)
grid.addWidget(self.testButtons02Group(), 2, 0)
self.setLayout(grid)
self.setWindowTitle("Radio Buttons Test")
self.resize(480, 200)
def testButtons01Group(self):
groupBox = QGroupBox("Group 01")
self.testBtn01 = QPushButton('Grp01')
self.radioBtn1 = QRadioButton("Button01")
self.radioBtn2 = QRadioButton("Button02")
self.radioBtn3 = QRadioButton("Button03")
self.radioBtn1.setChecked(True)
hbox = QHBoxLayout()
hbox.addWidget(self.radioBtn1)
hbox.addWidget(self.radioBtn2)
hbox.addWidget(self.radioBtn3)
vbox = QVBoxLayout()
vbox.addWidget(self.testBtn01)
vbox.addLayout(hbox)
vbox.addStretch(1)
groupBox.setLayout(vbox)
# Connections
self.connect(self.testBtn01, SIGNAL('clicked()'), self.testBtn01_pushBtn)
return groupBox
def testButtons02Group(self):
groupBox = QGroupBox("Group 02")
self.testBtn02 = QPushButton('Grp02')
self.radioBtn1 = QRadioButton("Button01")
self.radioBtn2 = QRadioButton("Button02")
self.radioBtn3 = QRadioButton("Button03")
self.radioBtn1.setChecked(True)
hbox = QHBoxLayout()
hbox.addWidget(self.radioBtn1)
hbox.addWidget(self.radioBtn2)
hbox.addWidget(self.radioBtn3)
vbox = QVBoxLayout()
vbox.addWidget(self.testBtn02)
vbox.addLayout(hbox)
vbox.addStretch(1)
groupBox.setLayout(vbox)
# Connections
self.connect(self.testBtn02, SIGNAL('clicked()'), self.testBtn02_pushBtn)
return groupBox
def testBtn01_pushBtn(self, *args):
print "Test Button is pushed"
self.testBtn01_Funcs()
def testBtn01_Funcs(self):
if self.radioBtn1.isChecked():
print ">>> Group01 Radio Button 1 selected"
elif self.radioBtn2.isChecked():
print ">>> Group01 Radio Button 2 selected"
else:
print ">>> Group01 Radio Button 3 selected"
def testBtn02_pushBtn(self, *args):
print "Test Button is pushed"
self.testBtn02_Funcs()
def testBtn02_Funcs(self):
if self.radioBtn1.isChecked():
print ">>> Group02 Radio Button 1 selected"
elif self.radioBtn2.isChecked():
print ">>> Group02 Radio Button 2 selected"
else:
print ">>> Group02 Radio Button 3 selected"
def main():
global app
global form
app = qApp
form = mainWindow()
form.show()
if __name__ == '__main__':
main()
非常感谢任何建议
答案 0 :(得分:0)
我没有PyQt所以我无法测试您的代码,但如果真的正常工作,我非常感到惊讶。特别是,我怀疑testBtn01_Funcs()
中的测试实际上会给出与第二个按钮组相关的结果,而不是第一个按钮组。
OTOH,按钮创建阶段应该可以正常工作 - 它与我们昨天在this tkinter question中讨论过的情况类似。但是对于您的GUI,您做需要为每个按钮分别设置对象属性,因为您想在创建它们之后查询它们的状态。
我不熟悉Qt - 我通常使用GTK作为我的GUI,而在GTK中,radiobutton回调函数通过了接收信号作为第一个arg的单选按钮,所以你不需要如果你不想,请保留对每个按钮的引用;也许Qt有类似的功能。