2014-04-03 6 views
0

저는 PyQt에서 PySide로 스크립트를 이동하고 슬롯 이름과 관련하여 질문을했습니다. 컨텍스트의 경우 UI가 Qt Designer로 생성됩니다. 파일은 .ui 개로 저장됩니다. .py 개의 파일로 변환하여 pyside-uic을 사용합니다. 이 스크립트는 Autodesk Maya에서 사용됩니다.명명 된 슬롯을 사용하여 PyQt에서 PySide로 이동

생성 된 .py 스크립트는 QtCore.QMetaObject.connectSlotsByName(Dialog) 명령을 사용하여 신호를 슬롯에 연결합니다.

on_<objectname>_<signalname>() 슬롯 (예 : on_pushButton_clicked())을 찾습니다.

@QtCore.pyqtSlot(name = "on_pushButton_clicked") 
def testButton_pressed(self): 
    print "pressed button" 

PySide에서이된다 :

@QtCore.Slot(name = "on_pushButton_clicked") 
def testButton_pressed(self): 
    print "pressed button" 

이것은 PySide와 PyQt는 함께 일 수 있지만 다음과 같이

은 이전 PyQt4과 함께, 우리는 우리의 슬롯을 지명했다. PySide는 더 이상 슬롯의 "name"매개 변수를 인식하지 못합니다. 해결 방법은 testButton_pressed()의 기능을 on_pushButton_clicked()으로 바꾸는 것이지만 모든 스크립트에서이 작업을 수행하지 않아도됩니다. PySide가 슬롯 "name"인수를 인식하도록하는 더 좋은 방법이 있습니까?

답변

0

이것은 분명히 버그입니다. PySide documentationname 인수가 지원되지만 신호가 발생할 때 RuntimeError (버전 1.2.1 사용)을 생성합니다. name 인수가 없으면 신호가 정상적으로 작동합니다.

의도적으로 예를 들어, 잘못된 이름을 사용하기 때문에 이름 슬롯을 연결하는 메커니즘은 여전히 ​​확실히

:

QMetaObject::connectSlotsByName: No matching signal for on_button_clickedXXX() 
0

과 같이 수행합니다 :

@QtCore.Slot(name='on_button_clickedXXX') 
    def foo(self): 
     print('on_button_clicked') 

이 오류가 발생합니다

@QtCore.Slot(str) 
def on_pushButton_clicked(self, name = "on_pushButton_clicked"): 
    print "pressed button" 
+0

나를 위해 작동하지 않았다. 함수 이름이 "name"속성과 다를 것을 요구합니다. 예. def buttonClicked (self, name = "on_pushButton_clicked") : – Psykojello

관련 문제