PyQt 线程类 QThread使用详解


Posted in Python onJuly 16, 2017

PyQt中的线程类 QtCore.QThread ,使用时继承QThread类

启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程中。

如果在UI线程中执行网络连接和数据库操作等耗时的操作,界面会被卡住,Windows下有可能会出现“无响应”的警告。

阻塞UI线程会降低用户体验和应用稳定性。因此我们可以把耗时操作放在线程中去执行。

QThread代表一个线程,我们可以复写run函数来执行我们要的操作。

QThread可以使用 QtCore.pyqtSignal 来与界面交互和传输数据。

PyQt4 QThread 代码示例

•Python2.7
# -*- coding: utf-8 -*-
import sys

from PyQt4 import QtCore
from PyQt4.QtCore import QCoreApplication
from PyQt4.QtGui import QWidget, QPushButton, QApplication, QTextBrowser


class TimeThread(QtCore.QThread):
  signal_time = QtCore.pyqtSignal(str, int) # 信号

  def __init__(self, parent=None):
    super(TimeThread, self).__init__(parent)
    self.working = True
    self.num = 0

  def start_timer(self):
    self.num = 0
    self.start()

  def run(self):
    while self.working:
      print "Working", self.thread()
      self.signal_time.emit("Running time:", self.num) # 发送信号
      self.num += 1
      self.sleep(1)


class TimeDialog(QWidget):
  def __init__(self):
    super(TimeDialog, self).__init__()
    self.timer_tv = QTextBrowser(self)
    self.init_ui()
    self.timer_t = TimeThread()
    self.timer_t.signal_time.connect(self.update_timer_tv)

  def init_ui(self):
    self.resize(300, 200)
    self.setWindowTitle('TimeDialog')
    self.timer_tv.setText("Wait")
    self.timer_tv.setGeometry(QtCore.QRect(10, 145, 198, 26))
    self.timer_tv.move(0, 15)

    btn1 = QPushButton('Quit', self)
    btn1.setToolTip('Click to quit')
    btn1.resize(btn1.sizeHint())
    btn1.move(200, 150)
    btn1.clicked.connect(QCoreApplication.instance().quit)

    start_btn = QPushButton('Start', self)
    start_btn.setToolTip("Click to start")
    start_btn.move(50, 150)
    self.connect(start_btn, QtCore.SIGNAL("clicked()"), self.click_start_btn)

  def click_start_btn(self):
    self.timer_t.start_timer()

  def update_timer_tv(self, text, number):
    self.timer_tv.setText(self.tr(text + " " + str(number)))


if __name__ == '__main__':
  app = QApplication(sys.argv)
  time_dialog = TimeDialog()
  time_dialog.show()

  sys.exit(app.exec_())

QThread中使用的信号 signal_time = QtCore.pyqtSignal(str, int) 指定了参数str和int

发送信号 self.signal_time.emit("Running time:", self.num)

外部接收信号 self.timer_t.signal_time.connect(self.update_timer_tv)
信号连接到方法 update_timer_tv(self, text, number) ,注意信号与方法的参数要一一对应

使用中我们可以定义多种不同的信号 QtCore.pyqtSignal

启动线程,调用 start()

Python 相关文章推荐
Python基础中所出现的异常报错总结
Nov 19 Python
python中redis的安装和使用
Dec 04 Python
python2.7实现FTP文件下载功能
Apr 15 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
python中count函数简单的实例讲解
Feb 06 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
简单了解Django项目应用创建过程
Jul 06 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 #Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 #Python
Python利用flask sqlalchemy实现分页效果
Aug 02 #Python
Python实现发送QQ邮件的封装
Jul 14 #Python
python记录程序运行时间的三种方法
Jul 14 #Python
python运行其他程序的实现方法
Jul 14 #Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 #Python
You might like
国外十大最流行的PHP框架排名
2013/07/04 PHP
PHP会话控制实例分析
2016/12/24 PHP
比Jquery的document.ready更快的方法
2010/04/28 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
使用js画图之画切线
2015/01/12 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
浅析Python编写函数装饰器
2016/03/18 Python
python实现折半查找和归并排序算法
2017/04/14 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
python实现windows下文件备份脚本
2018/05/27 Python
python 三元运算符使用解析
2019/09/16 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Python @property原理解析和用法实例
2020/02/11 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
七年级历史教学反思
2014/02/05 职场文书
八项规定整改方案
2014/02/21 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
尊师重教演讲稿
2014/09/04 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
店面出租协议书范本
2014/11/28 职场文书
公司出差管理制度范本
2015/08/05 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书