2016-12-16 9 views
2

タイトルで述べたように。どうすればこのようなことができますか?PyQt5 - GUIスレッドで作業者トレッドからイベントを呼び出す方法

class Main(QWidget): 

     def __init__(self): 

       super().__init__() 

     def StartButtonEvent(self): 

       self.test = ExecuteThread() 
       self.test.start() 

     def MyEvent(self): 

       #MainThreadGUI 

class ExecuteThread(QThread): 

     def run(self): 

       # A lot of work 

       # Signal to main thread about finishing of job = mainthread will perform MyEvent 

私はここにいくつかのチュートリアルがpyqt4 emiting signals in threads to slots in main thread

、ここEmit signal from pyQt Qthread

見つかりましたが、PyQt5で働いていないようです:/

答えて

3

ただ、ここQThread.finished信号を使用します。スレッドを終了すると自動的に実行されます。 もちろん、独自のカスタム信号を定義することもできます。

from PyQt5.QtCore import pyqtSignal 

class Main(QWidget): 

    def __init__(self): 
     super().__init__() 

    def StartButtonEvent(self): 
     self.test = ExecuteThread() 
     self.test.start() 
     self.test.finished.connect(thread_finished) 
     self.test.my_signal.connect(my_event) 

    def thread_finished(self): 
     # gets executed if thread finished 
     pass 

    def my_event(self): 
     # gets executed on my_signal 
     pass 


class ExecuteThread(QThread): 
    my_signal = pyqtSignal() 

    def run(self): 
     # do something here 
     self.my_signal.emit() 
     pass 
+0

これは簡単でした。 :) どうもありがとうございます! –

+0

質問がもう1つありますか?私はこの信号にいくつかの議論を加えることができますか?それともそれを達成するための他の簡単な手順がありますか?たとえば、引数にintまたはstringを送信する –

+0

はい、引数を追加するのは簡単です。 [シグナルとスロット](http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html)の公式PyQt5ドキュメントを見てください。 – MrLeeh

関連する問題