from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import time
import threading
import sys
class single_widge():
def __init__(self):
pass
def get_msg(self, msg):
print(msg)
class main_widge(QObject):
msg_signal = pyqtSignal(list)
def __init__(self):
super().__init__()
self.sg = single_widge()
self.bbb = threading.Thread(target=self.cont)
self.bbb.start()
self.aaa = threading.Thread(target=self.send_msg)
self.aaa.start()
def send_msg(self):
while True:
self.msg_signal.emit([11111111, 222222222])
time.sleep(1)
def cont(self):
self.msg_signal.connect(self.sg.get_msg)
if __name__ == '__main__':
app = QApplication(sys.argv)
aaa = main_widge()
app.exec_()
程序的总体思路就是在类中生成的两个线程,一个线程启动后持续发送信号,另一个线程启动后仅将该信号和槽函数连接。结果表明连接语句并没有起到效果。
我将连接语句放在线程函数send_msg下,或者放在__init__下都可以正常运行。
请问这种情况是为什么?
我写这个例子的本意是需要在线程中实现pyqt信号和槽的连接/断连,有什么比较好的解决办法吗?
连接必须在主线程里执行
而且子线程所有需要修改UI的操作必须使用委托