8

main 以外の Python スレッドから GUI スレッドを更新する方法を見つけようとしています。sourceforgeのPyQt5 ドキュメントには、これを行う方法に関する適切な指示があります。しかし、私はまだ物事を機能させることができません。

対話型セッションからの次の出力を説明する良い方法はありますか? これらのオブジェクトで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'
4

1 に答える 1

27

次の単語とコードはPyQt5 docsにあります。

新しいシグナルは、QObject のサブクラスでのみ定義する必要があります。それらはクラス定義の一部である必要があり、クラスが定義された後にクラス属性として動的に追加することはできません。

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"
于 2014-09-19T09:43:33.233 に答える