|
RT,查了Qt关于Pyside2的相关资料,对QThread的介绍使用还是override了run方法,并没有Qt目前主推的moveToThread方法,我按照自己的理解使用Python写了多线程。但是打印结果不正确,有谁能给找下问题,介绍下么?
MultiThreadTest:创建线程,信号槽触发。
Worker:被移入新线程的类
具体代码如下
Worker:
- #!/usr/bin/env python
- # encoding: utf-8
- # @author: qiaowei
- # @license: (C) Copyright 2013-2019
- # @contact: weiweiqiao@126.com
- # @file: worker.py
- # @time: 2020/7/28 0028
- # @desc:
- import threading
- from PySide2.QtCore import QThread
- from PySide2.QtCore import Slot
- from PySide2.QtCore import QObject
- class Worker(QObject):
- def __init__(self):
- super().__init__()
- # print('Worker.__init__ = ' + str(id(QThread.currentThread())))
- @Slot()
- def do_something(self):
- # print('Worker.do_something = ' + str(threading.currentThread()))
- print('Worker.do_something = ' + str(QThread.currentThread()))
复制代码 MultiThreadTest:
- #!/usr/bin/env python
- # encoding: utf-8
- # @author: qiaowei
- # @license: (C) Copyright 2013-2019
- # @contact: weiweiqiao@126.com
- # @file: multithread_test.py
- # @time: 2020/7/28 0028
- # @desc:
- import threading
- from PySide2.QtCore import QThread
- from PySide2.QtCore import QObject
- from PySide2.QtCore import Signal
- from multithread.worker import Worker
- class MultiThreadTest(QObject):
- def __init__(self):
- super().__init__()
- self.__thread_a = QThread()
- self.__worker = Worker()
- self.send_msg.connect(self.__worker.do_something)
- # pass
- def start_multithread(self):
- # print('MultithreadTest.start_multithread = ' + str(threading.currentThread()))
- print('MultithreadTest.start_multithread = ' + str(QThread.currentThread()))
- multi_thread = MultiThreadTest()
- self.__worker.moveToThread(self.__thread_a.thread())
- self.__thread_a.start()
- # self.__thread_a.sleep(3)
- # print('MultithreadTest.start_multithread = ' + str(threading.currentThread()))
- print('MultithreadTest.start_multithread = ' + str(QThread.currentThread()))
- # multi_thread.send_msg.emit()
- self.send_msg.emit()
- # print('MultithreadTest.start_multithread = ' + str(threading.currentThread()))
- print('MultithreadTest.start_multithread = ' + str(QThread.currentThread()))
- # 定义无参数信号槽
- send_msg = Signal()
复制代码 运行:
- #!/usr/bin/env python
- # encoding: utf-8
- # @author: qiaowei
- # @license: (C) Copyright 2013-2019
- # @contact: weiweiqiao@126.com
- # @file: start_test.py
- # @time: 2020/7/28 0028
- # @desc:
- from multithread.multithread_test import MultiThreadTest
- start_01 = MultiThreadTest()
- start_01.start_multithread()
复制代码 运行结果
- MultithreadTest.start_multithread = <PySide2.QtCore.QThread object at 0x0000000002FE6408>
- MultithreadTest.start_multithread = <PySide2.QtCore.QThread object at 0x0000000002FE62C8>
- Worker.do_something = <PySide2.QtCore.QThread object at 0x0000000002FE62C8>
- MultithreadTest.start_multithread = <PySide2.QtCore.QThread object at 0x0000000002FE62C8>
复制代码
|
|