PyQt 线程类 QThread使用详解
发布时间 - 2026-01-11 02:22:01 点击率:次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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何自定义建站之星网站的导航菜单样式?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
C语言设计一个闪闪的圣诞树
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
EditPlus 正则表达式 实战(3)
Laravel怎么实现验证码(Captcha)功能
如何用PHP快速搭建CMS系统?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
网站建设保证美观性,需要考虑的几点问题!
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
高端建站如何打造兼具美学与转化的品牌官网?
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Android利用动画实现背景逐渐变暗
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
原生JS实现图片轮播切换效果
大型企业网站制作流程,做网站需要注册公司吗?
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
nginx修改上传文件大小限制的方法
javascript日期怎么处理_如何格式化输出
简单实现Android文件上传
原生JS获取元素集合的子元素宽度实例
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
如何破解联通资金短缺导致的基站建设难题?
PythonWeb开发入门教程_Flask快速构建Web应用
郑州企业网站制作公司,郑州招聘网站有哪些?
网站制作企业,网站的banner和导航栏是指什么?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
iOS验证手机号的正则表达式
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel怎么为数据库表字段添加索引以优化查询
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Laravel distinct去重查询_Laravel Eloquent去重方法
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何选择PHP开源工具快速搭建网站?
如何挑选优质建站一级代理提升网站排名?
网站页面设计需要考虑到这些问题
手机网站制作与建设方案,手机网站如何建设?
如何获取上海专业网站定制建站电话?
php485函数参数是什么意思_php485各参数详细说明【介绍】
Python面向对象测试方法_mock解析【教程】
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】

