PyQt5-如何通过GUI线程从工作区发出信号以调用事件

Eri*_*tný 3 python pyqt5

正如我在标题中提到的。我该怎么做?

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
Run Code Online (Sandbox Code Playgroud)

我在这里找到了一些教程pyqt4在线程中向主线程的插槽中发射信号

这里从pyQt Qthread发出信号

但是似乎在PyQt5中不起作用:/

MrL*_*eeh 5

只需在此处使用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
Run Code Online (Sandbox Code Playgroud)