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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python函数式编程
Jul 20 Python
Python实现备份MySQL数据库的方法示例
Jan 11 Python
Python发送http请求解析返回json的实例
Mar 26 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
flask框架自定义url转换器操作详解
Jan 25 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
Python手动或自动协程操作方法解析
Jun 22 Python
python 生成正态分布数据,并绘图和解析
Dec 21 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
Snoopy类使用小例子
2008/04/15 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
JS匀速运动演示示例代码
2013/11/26 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
vue实现分页加载效果
2019/12/24 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
python基础教程之udp端口扫描
2014/02/10 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Django添加sitemap的方法示例
2018/08/06 Python
python日志logging模块使用方法分析
2019/05/23 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
医学院四年学习生活的自我评价
2013/11/06 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
师范类求职信
2014/06/21 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
公司文体活动总结
2015/05/07 职场文书
毕业实习单位意见
2015/06/04 职场文书
单位工资证明范本
2015/06/12 职场文书
病假证明模板
2015/06/19 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫