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实现百度关键词排名查询
Mar 30 Python
python进阶教程之循环对象
Aug 30 Python
python实现超简单端口转发的方法
Mar 13 Python
Python元组常见操作示例
Feb 19 Python
对Django 转发和重定向的实例详解
Aug 06 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 Python
python中的yield from语法快速学习
Nov 06 Python
彻底解决Python包下载慢问题
Nov 15 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
坏狼php学习 计数器实例代码
2008/06/15 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
解析php取整的几种方式
2013/06/25 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
JavaScript延迟加载
2021/03/09 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python lxml模块安装教程
2015/06/02 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
python如何编写win程序
2020/06/08 Python
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
优秀中专生推荐信
2013/11/17 职场文书
建筑工程管理专业自荐信范文
2013/12/28 职场文书
操行评语大全
2014/04/30 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
2015年国庆节寄语
2015/08/17 职场文书
《鲸》教学反思
2016/02/23 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书