全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

PyQt 线程类 QThread使用详解

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()


# PyQt中使用QThread  # PyQt  # 线程  # QThread  # 详解pyqt5 动画在QThread线程中无法运行问题  # pyqt5中QThread在使用时出现重复emit的实例  # 我们可以  # 自己的  # 放在  # 都在  # 可以使用  # 中去  # 连接到  # str  # def  # int  # signal_time  # QApplication  # QPushButton  # QTextBrowser  # QWidget  # TimeThread  # parent  # print  # start  # Working 


相关文章: 如何用免费手机建站系统零基础打造专业网站?  平台云上自主建站:模板化设计与智能工具打造高效网站  大连网站制作公司哪家好一点,大连买房网站哪个好?  制作表格网站有哪些,线上表格怎么弄?  简历在线制作网站免费版,如何创建个人简历?  教程网站设计制作软件,怎么创建自己的一个网站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  寿县云建站:智能SEO优化与多行业模板快速上线指南  西安大型网站制作公司,西安招聘网站最好的是哪个?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  济南专业网站制作公司,济南信息工程学校怎么样?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何快速辨别茅台真假?关键步骤解析  建站主机核心功能解析:服务器选择与网站搭建流程指南  韩国服务器如何优化跨境访问实现高效连接?  h5网站制作工具有哪些,h5页面制作工具有哪些?  建站之星如何一键生成手机站?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何自定义建站之星模板颜色并下载新样式?  如何快速搭建高效WAP手机网站?  如何选购建站域名与空间?自助平台全解析  北京专业网站制作设计师招聘,北京白云观官方网站?  如何通过云梦建站系统实现SEO快速优化?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  青岛网站建设如何选择本地服务器?  如何在云虚拟主机上快速搭建个人网站?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  建站之星图片链接生成指南:自助建站与智能设计教程  红河网站制作公司,红河事业单位身份证如何上传?  如何快速搭建高效简练网站?  宝塔建站无法访问?如何排查配置与端口问题?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  建站主机类型有哪些?如何正确选型  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何高效生成建站之星成品网站源码?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  SQL查询语句优化的实用方法总结  C#怎么使用委托和事件 C# delegate与event编程方法  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  网站制作免费,什么网站能看正片电影?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  如何选择网络建站服务器?高效建站必看指南  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。