尽管代码中有相同的变量名称,但函数仍然有效

时间:2014-12-10 04:26:11

标签: python radio-button

我遇到了这种创建UI的风格,并且认为我已经尝试了一些单选按钮。

基本上我创建了两个功能 - testButtons01GrouptestButtons02Group,每个功能可以满足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()

非常感谢任何建议

1 个答案:

答案 0 :(得分:0)

我没有PyQt所以我无法测试您的代码,但如果真的正常工作,我非常感到惊讶。特别是,我怀疑testBtn01_Funcs()中的测试实际上会给出与第二个按钮组相关的结果,而不是第一个按钮组。

OTOH,按钮创建阶段应该可以正常工作 - 它与我们昨天在this tkinter question中讨论过的情况类似。但是对于您的GUI,您需要为每个按钮分别设置对象属性,因为您想在创建它们之后查询它们的状态。

我不熟悉Qt - 我通常使用GTK作为我的GUI,而在GTK中,radiobutton回调函数通过了接收信号作为第一个arg的单选按钮,所以你不需要如果你不想,请保留对每个按钮的引用;也许Qt有类似的功能。