Python+PyQT5的子线程更新UI界面的实例


Posted in Python onJune 14, 2019

子线程里是不能更新UI界面的,在移动端方面。Android的UI访问是没有加锁的,多个线程可以同时访问更新操作同一个UI控件。也就是说访问UI的时候,android系统当中的控件都不是线程安全的,这将导致在多线程模式下,当多个线程共同访问更新操作同一个UI控件时容易发生不可控的错误。所以Android中规定只能在UI线程中访问UI,相当于从另一个角度给Android的UI访问加上锁,一个伪锁。

在PyQT5中使用QThread

from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import time
 
#继承QThread
 
class Mythread(QThread):
  # 定义信号,定义参数为str类型
  breakSignal = pyqtSignal(int)
 
  def __init__(self, parent=None):
    super().__init__(parent)
    # 下面的初始化方法都可以,有的python版本不支持
    # super(Mythread, self).__init__()
 
  def run(self):
      #要定义的行为,比如开始一个活动什么的
 
      for i in(1,1000):
 
        print(i)
        self.breakSignal.emit(i)
      
 
 
if __name__ == '__main__':
  app = QApplication([])
  dlg = QDialog()
  dlg.resize(400, 300)
  dlg.setWindowTitle("自定义按钮测试")
  dlgLayout = QVBoxLayout()
  dlgLayout.setContentsMargins(40, 40, 40, 40)
  btn = QPushButton('测试按钮')
  dlgLayout.addWidget(btn)
  dlgLayout.addStretch(40)
  dlg.setLayout(dlgLayout)
  dlg.show()
 
 
  def chuli(a):
    # dlg.setWindowTitle(s)
    btn.setText(str(a))
 
  # 创建线程
  thread = Mythread()
  # # 注册信号处理函数
  thread.breakSignal.connect(chuli)
  # # 启动线程
  thread.start()
  dlg.exec_()
  app.exit()

在python中刷新UI可以类似,采用消息传递的机制。

可以在子线程中修改主线程的变量,主线程读取变量并绘制的方式。

以上这篇Python+PyQT5的子线程更新UI界面的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多线程、异步+多进程爬虫实现代码
Feb 17 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
基于python实现雪花算法过程详解
Nov 16 Python
python双向链表原理与实现方法详解
Dec 03 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
关于 Python json中load和loads区别
Nov 07 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 #Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 #Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 #Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 #Python
ubuntu 16.04下python版本切换的方法
Jun 14 #Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 #Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 #Python
You might like
yii操作session实例简介
2014/07/31 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
Bootstrap3 图片(响应式图片&图片形状)
2017/01/04 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
通过js随机函数Math.random实现乱序
2020/05/19 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
python如何实时获取tcpdump输出
2020/09/16 Python
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
远东集团网络工程师面试题
2014/10/20 面试题
手术室护士长竞聘书
2014/03/31 职场文书
市场部经理岗位职责
2014/04/10 职场文书
怒海潜将观后感
2015/06/11 职场文书
Vue的生命周期一起来看看
2022/02/24 Vue.js