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获得图片base64编码示例
Jan 16 Python
python安装与使用redis的方法
Apr 19 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
详解Python使用tensorflow入门指南
Feb 09 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
Python3标准库之functools管理函数的工具详解
Feb 27 Python
tensorflow常用函数API介绍
Apr 19 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
软件测试常见笔试题
2012/02/04 面试题
金融管理应届生求职信
2014/02/20 职场文书
计算机专业自荐信
2014/05/24 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
技术支持岗位职责
2015/02/13 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
详解GaussDB for MySQL性能优化
2021/05/18 MySQL