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 strip() 函数和 split() 函数的详解及实例
Feb 03 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
通过python将大量文件按修改时间分类的方法
Oct 17 Python
python批量下载抖音视频
Jun 17 Python
python装饰器常见使用方法分析
Jun 26 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
python字典的遍历3种方法详解
Aug 10 Python
python学生信息管理系统实现代码
Dec 17 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
Python定时器线程池原理详解
Feb 26 Python
使用Python实现微信拍一拍功能的思路代码
Jul 09 Python
pytest实现多进程与多线程运行超好用的插件
Jul 15 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 获取SWF动画截图示例代码
2014/02/10 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
js对象的复制继承实例
2015/01/10 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
python采用getopt解析命令行输入参数实例
2014/09/30 Python
用Python实现协同过滤的教程
2015/04/08 Python
pyenv命令管理多个Python版本
2017/03/26 Python
python安装scipy的方法步骤
2019/06/26 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
python中get和post有什么区别
2020/06/19 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
银行毕业实习自我鉴定
2013/09/19 职场文书
化工专业个人的求职信范文
2013/11/28 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers