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 04 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python删除本地夹里重复文件的方法
Nov 19 Python
浅谈django的render函数的参数问题
Oct 16 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
jupyter notebook 增加kernel教程
Apr 10 Python
python函数调用,循环,列表复制实例
May 03 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
php中的时间显示
2007/01/18 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
深入理解javascript中的立即执行函数(function(){…})()
2014/06/12 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python字符转换
2008/09/06 Python
Python实现子类调用父类的方法
2014/11/10 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
Python猴子补丁知识点总结
2020/01/05 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
群众路线对照检查材料
2014/09/22 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
用电申请报告范文
2015/05/18 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书