2016-12-16 3 views
2

Wie ich im Titel erwähnt habe. Wie kann ich so etwas tun?PyQt5 - Wie man das Signal vom Worker-Laufsteg aussendet, um das Ereignis per GUI-Thread aufzurufen

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 

fand ich einige Tutorials hier pyqt4 emiting signals in threads to slots in main thread

und hier Emit signal from pyQt Qthread

Aber es scheint, es in PyQt5 hat nicht funktioniert:/

Antwort

3

einfach das QThread.finished Signal hier verwenden. Es wird automatisch ausgeführt, wenn Sie Ihren Thread beenden. Natürlich können Sie auch Ihr eigenes benutzerdefiniertes Signal definieren, wenn Sie möchten.

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

Das war so einfach! :) Vielen Dank! –

+0

Kann ich noch eine Frage haben? Kann ich etwas Argument in diese Signale einfügen? Oder gibt es ein anderes einfaches Verfahren, um es zu erreichen? Zum Beispiel senden Sie einige int oder string in Argument –

+0

Ja, das Hinzufügen von Argumenten ist einfach. Werfen Sie einen Blick auf die offizielle PyQt5-Dokumentation für [Signale und Slots] (http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html) – MrLeeh

Verwandte Themen