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基础教程之元组操作使用详解
Mar 25 Python
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
python模拟事件触发机制详解
Jan 19 Python
python3调用R的示例代码
Feb 23 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
Python笔记之代理模式
Nov 20 Python
Python定义函数时参数有默认值问题解决
Dec 19 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
May 25 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 max_execution_time执行时间问题
2011/07/17 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
禁止你的左键复制实用技巧
2013/01/04 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
Pandas的数据过滤实现
2021/01/15 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
HTML5视频播放插件 video.js介绍
2018/09/29 HTML / CSS
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
家长给老师的感谢信
2015/01/20 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL
如何利用python实现列表嵌套字典取值
2022/06/10 Python