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对列表排序的方法实例分析
May 16 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
python技能之数据导出excel的实例代码
Aug 11 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
Python+OpenCV目标跟踪实现基本的运动检测
Jul 10 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
关于Python字符编码与二进制不得不说的一些事
Oct 04 Python
Python基础数据类型tuple元组的概念与用法
Aug 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作的文本留言本的例子(三)
2006/10/09 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
javascript常用方法总结
2015/05/14 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
jQuery Datatables表头不对齐的解决办法
2017/11/27 jQuery
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
vue实现扫码功能
2020/01/17 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python实现类继承实例
2014/07/04 Python
python WindowsError的错误代码详解
2017/07/23 Python
理解python中生成器用法
2017/12/20 Python
Django实现组合搜索的方法示例
2018/01/23 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Python求离散序列导数的示例
2019/07/10 Python
python 调试冷知识(小结)
2019/11/11 Python
PyTorch中的C++扩展实现
2020/04/02 Python
生物技术毕业生自荐信
2013/10/23 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
工商行政处罚决定书
2015/06/24 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python