2015-11-11 1 views
1

Я довольно новичок в программировании, поэтому, пожалуйста, будьте терпеливы со мной. Я пытаюсь создать простой скрипт в Autodesk Maya. Я создал метод, который устанавливает два чек-боксов бок о бок (см ниже) ...PySide - Как подключить сигнал к виджету, который был создан методом, вызываемым внутри другого метода

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) 

Моя проблема заключается в том, что, когда я пытаюсь подключить сигнал к нему, он не будет работать. Все обучающие материалы, которые я наблюдал до сих пор, имеют только подключенные сигналы к виджетам, которые НЕ созданы, вызывая метод внутри другого метода (я понимаю, что, вероятно, это не правильная терминология, но, как я уже сказал, я новичок в этом :() Я отправлю код, который я написал, чтобы попытаться подключить сигнал ниже. Я предполагал, что мне нужно было указать метод, который создал этот флажок, но я не мог заставить это работать. Я получаю этот сигнал, подключенный? Также вы можете исправить мою терминологию :) Спасибо всем, кто может помочь :)

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

Любой вопрос, который включает в себя варианты «он не работает» без дополнительного объяснения, вряд ли получит одобрение у большинства потенциальных ответчиков. Дикая догадка: вы получаете 'AttributeError', потому что' self' не имеет атрибута 'selection_CB'. – ekhumoro

ответ

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)