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

2024-01-17

正如我在标题中提到的。我怎样才能做这样的事情?

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将线程中的信号发送到主线程中的插槽 https://stackoverflow.com/questions/9614947/pyqt4-emiting-signals-in-threads-to-slots-in-main-thread

和这里从 pyQt Qthread 发出信号 https://stackoverflow.com/questions/37081098/emit-signal-from-pyqt-qthread-causes-python-exe-crash

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


只需使用QThread.finished http://doc.qt.io/qt-5/qthread.html#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt5 - 如何从工作线程发出信号以通过 GUI 线程调用事件 的相关文章

随机推荐