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引用(import)文件夹下的py文件的方法
Aug 26 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Python 文件操作的详解及实例
Sep 18 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Django model序列化为json的方法示例
Oct 16 Python
python画柱状图--不同颜色并显示数值的方法
Dec 13 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
浅析python中的del用法
Sep 02 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
php切割页面div内容的实现代码分享
2012/07/31 PHP
PHP 透明水印生成代码
2012/08/27 PHP
php存储过程调用实例代码
2013/02/03 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
Jquery滑动门/tab切换实现方法完整示例
2020/06/05 jQuery
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
Python生成随机MAC地址
2015/03/10 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
python实现宿舍管理系统
2019/11/22 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
python类共享变量操作
2020/09/03 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
戴森英国官网:Dyson英国
2019/05/07 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
什么是反射?如何实现反射?
2016/07/25 面试题
大专毕业生简历的自我评价
2013/10/20 职场文书
计算机相关的自我评价
2014/01/15 职场文书
秋季运动会广播稿
2014/02/22 职场文书
《穷人》教学反思
2014/04/08 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
在js中修改html body的样式
2021/11/11 Javascript