2013-03-30 66 views
1

在PySide中,我想用定義信號作爲參數的類發出一個信號。例如:如何在PySide中將自身作爲參數發出信號?

class MyWidget(QtGui.QWidget): 

    signal_widget_closed = QtCore.Signal(MyWidget) 

    def close(self): 
     super(MyWidget, self).close() 
     self.signal_widget_closed.emit(self) 

但是,第二行提供了一個NameError,因爲MyWidget在那時還不存在。 現在我解決這個問題通過發射一個QWidget這樣

signal_widget_closed = QtCore.Signal(QtGui.QWidget) 

但我寧願用進myWidget的解決方案類型。有任何想法嗎?

回答

1

你只是不需要這個參數。
在槽內使用QObject::sender可以找出哪個物體發出信號。

+0

這是行不通的,如果我再調用插槽作爲一個正常的過程(或我將不得不單獨實現這兩種情況下的功能)。您鏈接的頁面爲此發出警告並說:_「此功能違反了模塊化的面向對象原則。」_ 儘管如此,瞭解此選項仍是一件好事。謝謝你提到它。 – titusjan

+0

@titusjan唯一的解決方案似乎是使用元類,我可以說這是不值得的。也許嘗試重新思考你的應用程序的體系結構。 –

+0

基本上你需要[引用自己內部的類](http://google.com/search?q=python+reference+class+inside+itself)。但是在類定義之後添加信號的解決方案將不起作用,因爲PySide在定義類之後似乎使用元類來讀取這些信號。 –

1

可以在之後定義類別定義後的信號

你的代碼是這樣:

class MyWidget(QtGui.QWidget): 
    def close(self): 
     super(MyWidget, self).close() 
     self.signal_widget_closed.emit(self) 
MyWidget.signal_widget_closed = QtCore.Signal(MyWidget) 
相關問題