【以下回答由 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
函数中接收到这个信号,并根据参数值进行相应的处理。