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 06 Python
python复制与引用用法分析
Apr 08 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
python用户管理系统
Mar 13 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
python剪切视频与合并视频的实现
Mar 03 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
Apr 07 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处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
期末总结的个人自我评价
2013/11/02 职场文书
办公室主任岗位职责
2013/11/08 职场文书
营业员演讲稿
2013/12/30 职场文书
超市开学活动方案
2014/03/01 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
MongoDB支持的数据类型
2022/04/11 MongoDB
Java对文件的读写操作方法
2022/04/29 Java/Android