PySide - 如何将信号连接到通过在另一个方法内调用的方法创建的窗口小部件

时间:2015-11-11 11:47:27

标签: pyside maya

我对编程很新,所以请耐心等待我。我正在尝试在Autodesk Maya中创建一个简单的脚本。我创建了一个方法,可以并排设置两个复选框(见下文)......

    def checkboxLayout(self, name1, text1, name2, text2, parentLayout, initState):

        ##create and add horizontal layout
        layout = QtGui.QHBoxLayout()
        parentLayout.addLayout(layout)

        width = 75

        name1 = QtGui.QCheckBox(text1)
        layout.addWidget(name1)
        name1.setMinimumWidth(width)
        name1.setMaximumWidth(width)
        name1.setChecked(initState)

        name2 = QtGui.QCheckBox(text2)
        layout.addWidget(name2)
        name2.setMinimumWidth(width)
        name2.setMaximumWidth(width)

后来我把这个方法调用了两次,以免我不得不两次写出相同的大块代码......

 def createLayout(self):
    ##Layout
    mainLayout = QtGui.QVBoxLayout()

    mainLayout.addWidget(self.title)
    mainLayout.addSpacerItem(self.titleSpacer)
    mainLayout.addWidget(self.oldLabel)
    self.checkboxLayout("selection_CB", "Selection", "name_CB", "Name", mainLayout, True)
    mainLayout.addWidget(self.textbox1)
    mainLayout.addSpacerItem(self.midSpacer)
    mainLayout.addWidget(self.newLabel)
    mainLayout.addWidget(self.textbox2)
    self.checkboxLayout("delHistory_CB", "Delete\nHistory", "freezeTrans_CB", "Freeze\nTransforms", mainLayout, False)

    self.buttonLayout = QtGui.QGridLayout()
    mainLayout.addLayout(self.buttonLayout)
    self.buttonLayout.addWidget(self.cancelButton, 0, 0)
    self.buttonLayout.addWidget(self.okButton, 0, 1)

    self.setLayout(mainLayout)

我的问题是,当我尝试将信号连接到它时,它将无法工作。到目前为止,我所看过的所有教程都只通过调用另一个方法中的方法来创建Widget并未创建的小部件的信号(我意识到这可能不是正确的术语,但就像我说的,我是新来的:( )我将发布我编写的代码以尝试连接下面的信号。我的猜测是我必须指定创建复选框的方法,但我也无法使用它。所以怎么做我得到这个信号连接?也随意纠正我的术语:)感谢任何可以提供帮助的人:)

def createConnections(self):
        self.selection_CB.toggled.connect(self.checkboxLine1_ChangeState)

1 个答案:

答案 0 :(得分:0)

您在何处以及如何设置变量self.selection_CB

checkboxLayout功能中,您可以为复选框添加return,如下所示:

`return [name1, name2]`

然后只需在调用函数时分配它们并从那里连接事件:

self.check1, self.check2 = self.checkboxLayout("selection_CB", "Selection", "name_CB", "Name", mainLayout, True)

或者,如果它们始终连接到相同的功能,那么为什么不直接从checkboxLayout进行连接?

name1.stateChanged.connect(self.checkboxLine1_ChangeState)