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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
Python解析nginx日志文件
May 11 Python
python处理csv中的空值方法
Jun 22 Python
python逆序打印各位数字的方法
Jun 25 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
python3实现表白神器
Apr 09 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
Python图片的横坐标汉字实例
Dec 04 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 Python
python playwright 自动等待和断言详解
Nov 27 Python
Elasticsearch 索引操作和增删改查
Apr 19 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环境――Appserv
2006/12/13 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
php中使用临时表查询数据的一个例子
2013/02/03 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python实现合并两个排序的链表
2019/03/03 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
python nmap实现端口扫描器教程
2020/05/28 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
python 实现简易的记事本
2020/11/30 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
开平碉楼导游词
2015/02/06 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS