2014-04-03 53 views
0

我正在將一些腳本從PyQt移到PySide,並且有一個關於插槽名稱的問題。對於上下文,我們的UI是使用Qt Designer創建的。保存爲.ui文件。使用pyside-uic轉換爲.py文件。這些腳本然後在Autodesk Maya中使用。使用命名插槽從PyQt移動到PySide

生成的.py腳本使用以下命令將信號連接到插槽: QtCore.QMetaObject.connectSlotsByName(Dialog)

這會查找名爲on_<objectname>_<signalname>()的插槽,如on_pushButton_clicked()

此前與PyQt4的,我們命名我們的插槽如下:

@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" 

這曾與PyQt的,但不能與PySide。 PySide不再識別插槽中的「名稱」參數。解決方法是將testButton_pressed()函數重命名爲on_pushButton_clicked(),但我寧願不必爲我的所有腳本執行此操作。有沒有更好的方式讓PySide識別插槽「名稱」的參數?

回答

0

這顯然是一個錯誤。 PySide documentation表示支持name參數,但當信號觸發時它會生成RuntimeError(使用版本1.2.1)。沒有name參數,信號正常工作。

通過名稱連接槽的機制肯定還是有的,因爲故意使用無效的名稱,如:

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

產生這個錯誤:

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

這樣做:

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

這不適合我。我需要函數名稱與「name」屬性不同。 ex。 def buttonClicked(self,name =「on_pushButton_clicked」): – Psykojello