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的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
python实现带错误处理功能的远程文件读取方法
Apr 29 Python
python实现清屏的方法
Apr 30 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
Python及PyCharm下载与安装教程
Nov 18 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
简单了解python的内存管理机制
Jul 08 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 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 intval的测试代码发现问题
2008/07/27 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
wxPython学习之主框架实例
2014/09/28 Python
Python 的 Socket 编程
2015/03/24 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
python字符串格式化方式解析
2019/10/19 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
Django 实现图片上传和下载功能
2020/12/31 Python
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
应聘文员自荐信范文
2014/03/11 职场文书
企业出纳岗位职责
2014/03/12 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL