2013-07-10 11 views
7

私はGUIスレッドをmain以外のPythonスレッドから更新する方法を見つけようとしています。 sourceforgeのPyQt5 docsには、これを行う方法に関する良い指示があります。しかし、私はまだ物事を働かせることはできません。PyQt5シグナルとスロット 'QObjectには属性がありません'というエラーがあります

インタラクティブセッションからの次の出力を説明する良い方法はありますか?これらのオブジェクトでemitメソッドを呼び出す方法はありませんか?

>>> from PyQt5.QtCore import QObject, pyqtSignal 
>>> obj = QObject() 
>>> sig = pyqtSignal() 
>>> obj.emit(sig) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'QObject' object has no attribute 'emit' 

>>> obj.sig.emit() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'QObject' object has no attribute 'sig' 

>>> obj.sig = pyqtSignal() 
>>> obj.sig.emit() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'PyQt5.QtCore.pyqtSignal' object has no attribute 'emit' 
+1

:[PyQt5どのモジュールで発光方法が発見された?](http://stackoverflow.com/questions/17581506/pyqt5-in-what-module-is-the-emit-method -found) - __bound__シグナルだけが 'emit'メソッドを持っています。 ( 'obj.sig = pyqtSignal()'は依然としてバインドされていない信号です) – mata

+0

@mata:はい、私はsourceforgeのPyQt5ドキュメントからこれらの例を取っ​​ていました。あなたが[指摘したように](http://stackoverflow.com/questions/17581506/pyfqt5-in-what-module-is-the-emit-method-found)、emitメソッドはバインドされたシグナル用です。すなわち、 QObjectから継承するクラスのメンバです。私は上に貼り付けられたインタラクティブなセッションでそれをやっていないことに気づいていませんでした。 – ADB

+0

@ mata:興味深いことに、上記の3番目の例のように、** obj.sig = pyqtSignal()**の有用性は何ですか? – ADB

答えて

15

次の単語とコードがPyQt5 docsです。

新しい信号がのみクラスが定義された後、クラス属性としてQObject.They は、クラス定義と一部が動的に追加することはできませんする必要があり、サブクラスで定義する必要があります。ここで同じ

from PyQt5.QtCore import QObject, pyqtSignal 

class Foo(QObject): 

    # Define a new signal called 'trigger' that has no arguments. 
    trigger = pyqtSignal() 

    def connect_and_emit_trigger(self): 
     # Connect the trigger signal to a slot. 
     self.trigger.connect(self.handle_trigger) 

     # Emit the signal. 
     self.trigger.emit() 

    def handle_trigger(self): 
     # Show that the slot has been called. 

     print "trigger signal received" 
+0

うわー、一年後!回答は受け入れられました(上記のコメントで質問はクリアされましたが)。 – ADB

関連する問題