在放入线程中的函数发信号,在线程外的函数中收信号

img


想在放入线程中的fsmf函数中发信号,在线程外的shishi函数中收信号,不知怎么办?

【以下回答由 GPT 生成】

问题标题: 如何在将函数放入线程中时,在线程外的函数中接收信号?

问题内容: 我想在将一个函数放入线程中时,在线程外的另一个函数中接收这个线程发出的信号。请问该如何实现?

代码示例:

from PyQt5.QtCore import pyqtSignal, pyqtSlot, QThread, QObject
import threading

class MyClass(QObject):
    result_out = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.flag = 0
        self.result_out.connect(self.handle_signal)

    def function_in_thread(self):
        self.result_out.emit('a')
        print('self.flag in thread =', self.flag, '\n')

    def function_outside_thread(self):
        # 创建一个线程并启动
        t = threading.Thread(target=self.function_in_thread)
        t.start()

        # 在接收到信号之后断开信号和槽的连接
        self.result_out.disconnect(self.handle_signal)
        print('self.flag outside thread =', self.flag, '\n')

    def handle_signal(self, b):
        print('b =', b)
        if b == '1':
            self.flag = '1'
        elif b == '0':
            self.flag = '0'

if __name__ == "__main__":
    obj = MyClass()
    obj.function_outside_thread()

解决方案: 1. 创建一个信号result_out,指定信号参数类型为str。 2. 在需要发出信号的函数function_in_thread中,调用result_out.emit(value)来发出信号,并传递一个值value作为参数。 3. 在接收信号的函数handle_signal中,接收传递的参数,并根据参数值进行相应的操作。 4. 在需要在线程中执行的函数function_outside_thread中,创建一个新的线程并指定该线程的目标函数为function_in_thread。 5. 在主线程中调用function_outside_thread来启动线程,同时在接收到信号之后使用result_out.disconnect(handle_signal)来断开信号和槽的连接。

这样,当function_in_thread被放入线程中时,会发出一个信号,可以在线程外的handle_signal函数中接收到这个信号,并根据参数值进行相应的处理。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^