找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2624|回复: 2

[求助] Pyside2的线程使用

1

主题

2

帖子

2

积分

贫民

积分
2
QQ
weiweiqiao 发表于 2020-8-10 16:46:54 | 显示全部楼层 |阅读模式
RT,查了Qt关于Pyside2的相关资料,对QThread的介绍使用还是override了run方法,并没有Qt目前主推的moveToThread方法,我按照自己的理解使用Python写了多线程。但是打印结果不正确,有谁能给找下问题,介绍下么?
MultiThreadTest:创建线程,信号槽触发。
Worker:被移入新线程的类
具体代码如下
Worker:
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. # @author: qiaowei
  4. # @license: (C) Copyright 2013-2019
  5. # @contact: weiweiqiao@126.com
  6. # @file: worker.py
  7. # @time: 2020/7/28 0028
  8. # @desc:


  9. import threading
  10. from PySide2.QtCore import QThread
  11. from PySide2.QtCore import Slot
  12. from PySide2.QtCore import QObject


  13. class Worker(QObject):
  14.     def __init__(self):
  15.         super().__init__()
  16.         # print('Worker.__init__ = ' + str(id(QThread.currentThread())))

  17.     @Slot()
  18.     def do_something(self):
  19.         # print('Worker.do_something = ' + str(threading.currentThread()))
  20.         print('Worker.do_something = ' + str(QThread.currentThread()))
复制代码
MultiThreadTest:
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. # @author: qiaowei
  4. # @license: (C) Copyright 2013-2019
  5. # @contact: weiweiqiao@126.com
  6. # @file: multithread_test.py
  7. # @time: 2020/7/28 0028
  8. # @desc:

  9. import threading
  10. from PySide2.QtCore import QThread
  11. from PySide2.QtCore import QObject
  12. from PySide2.QtCore import Signal

  13. from multithread.worker import Worker


  14. class MultiThreadTest(QObject):
  15.     def __init__(self):
  16.         super().__init__()
  17.         self.__thread_a = QThread()
  18.         self.__worker = Worker()
  19.         self.send_msg.connect(self.__worker.do_something)
  20.         # pass

  21.     def start_multithread(self):
  22.         # print('MultithreadTest.start_multithread = ' + str(threading.currentThread()))
  23.         print('MultithreadTest.start_multithread = ' + str(QThread.currentThread()))
  24.         multi_thread = MultiThreadTest()

  25.         self.__worker.moveToThread(self.__thread_a.thread())
  26.         self.__thread_a.start()
  27.         # self.__thread_a.sleep(3)
  28.         # print('MultithreadTest.start_multithread = ' + str(threading.currentThread()))
  29.         print('MultithreadTest.start_multithread = ' + str(QThread.currentThread()))
  30.         # multi_thread.send_msg.emit()
  31.         self.send_msg.emit()
  32.         # print('MultithreadTest.start_multithread = ' + str(threading.currentThread()))
  33.         print('MultithreadTest.start_multithread = ' + str(QThread.currentThread()))

  34.     # 定义无参数信号槽
  35.     send_msg = Signal()
复制代码
运行:
  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. # @author: qiaowei
  4. # @license: (C) Copyright 2013-2019
  5. # @contact: weiweiqiao@126.com
  6. # @file: start_test.py
  7. # @time: 2020/7/28 0028
  8. # @desc:


  9. from multithread.multithread_test import MultiThreadTest


  10. start_01 = MultiThreadTest()
  11. start_01.start_multithread()
复制代码
运行结果
  1. MultithreadTest.start_multithread = <PySide2.QtCore.QThread object at 0x0000000002FE6408>
  2. MultithreadTest.start_multithread = <PySide2.QtCore.QThread object at 0x0000000002FE62C8>
  3. Worker.do_something = <PySide2.QtCore.QThread object at 0x0000000002FE62C8>
  4. MultithreadTest.start_multithread = <PySide2.QtCore.QThread object at 0x0000000002FE62C8>
复制代码




回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-8-11 20:11:16 | 显示全部楼层
mark,有空研究一下。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
QQ
weiweiqiao  楼主| 发表于 2020-8-30 23:06:44 | 显示全部楼层
有知道的coder能给解释下么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表