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比较两个列表是否相等的方法
Jul 28 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
对Python3中的input函数详解
Apr 22 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
Python控制Firefox方法总结
Jun 03 Python
python随机数分布random均匀分布实例
Nov 27 Python
kafka-python 获取topic lag值方式
Dec 23 Python
python实现PCA降维的示例详解
Feb 24 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
python如何提升爬虫效率
Sep 27 Python
python内置进制转换函数的操作
Jun 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编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python 异常处理的实例详解
2017/09/11 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
Python 复平面绘图实例
2019/11/21 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
python计算导数并绘图的实例
2020/02/29 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
Linux操作面试题
2015/02/11 面试题
销售人员自我评价怎么写
2013/09/19 职场文书
公司市场部岗位职责
2013/12/02 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
大学生演讲稿范文
2014/01/11 职场文书
农村婚礼主持词
2014/03/13 职场文书
社区服务活动总结
2014/05/07 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers