python之线程通过信号pyqtSignal刷新ui的方法


Posted in Python onJanuary 11, 2019

第一部分:UI界面设计

界面效果图如下:

python之线程通过信号pyqtSignal刷新ui的方法

ui文件(可拉动控件自行创建一个button和text)

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
 <property name="geometry">
  <rect>
  <x>0</x>
  <y>0</y>
  <width>585</width>
  <height>394</height>
  </rect>
 </property>
 <property name="windowTitle">
  <string>Dialog</string>
 </property>
 <widget class="QPushButton" name="pushButton">
  <property name="geometry">
  <rect>
   <x>230</x>
   <y>320</y>
   <width>75</width>
   <height>23</height>
  </rect>
  </property>
  <property name="text">
  <string>timer_click</string>
  </property>
 </widget>
 <widget class="QTextEdit" name="textEdit">
  <property name="geometry">
  <rect>
   <x>70</x>
   <y>30</y>
   <width>441</width>
   <height>231</height>
  </rect>
  </property>
 </widget>
 </widget>
 <resources/>
 <connections>
 <connection>
  <sender>pushButton</sender>
  <signal>clicked()</signal>
  <receiver>Dialog</receiver>
  <slot>timer_click()</slot>
  <hints>
  <hint type="sourcelabel">
   <x>217</x>
   <y>229</y>
  </hint>
  <hint type="destinationlabel">
   <x>250</x>
   <y>241</y>
  </hint>
  </hints>
 </connection>
 </connections>
 <slots>
 <slot>timer_click()</slot>
 </slots>
</ui>

生成的py文件

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'TEST_QT_FROM.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
  def setupUi(self, Dialog):
    Dialog.setObjectName("Dialog")
    Dialog.resize(585, 394)
    self.pushButton = QtWidgets.QPushButton(Dialog)
    self.pushButton.setGeometry(QtCore.QRect(230, 320, 75, 23))
    self.pushButton.setObjectName("pushButton")
    self.textEdit = QtWidgets.QTextEdit(Dialog)
    self.textEdit.setGeometry(QtCore.QRect(70, 30, 441, 231))
    self.textEdit.setObjectName("textEdit")

    self.retranslateUi(Dialog)
    self.pushButton.clicked.connect(Dialog.timer_click)
    QtCore.QMetaObject.connectSlotsByName(Dialog)

  def retranslateUi(self, Dialog):
    _translate = QtCore.QCoreApplication.translate
    Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
    self.pushButton.setText(_translate("Dialog", "timer_click"))

第二部分:主要逻辑代码

from PyQt5 import QtWidgets, QtCore
from testqt.TEST_QT_FROM import Ui_Dialog
import sys
from PyQt5.QtCore import *
import time


# 继承QThread
class Runthread(QtCore.QThread):
  # python3,pyqt5与之前的版本有些不一样
  # 通过类成员对象定义信号对象
  _signal = pyqtSignal(str)

  def __init__(self):
    super(Runthread, self).__init__()

  def __del__(self):
    self.wait()

  def run(self):
    print("run 666")
    self._signal.emit("run 666"); # 信号发送



class TestQtFromC(QtWidgets.QWidget, Ui_Dialog):
  text =""
  def __init__(self):
    super(TestQtFromC, self).__init__()
    self.setupUi(self)

  #click
  def timer_click(self):
    self.thread = Runthread() # 创建线程
    self.thread._signal.connect(self.callbacklog) # 连接信号
    self.thread.start() # 开始线程

  # callback
  def callbacklog(self, msg):
    self.text =self.text+time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime())+msg+ "\n"
    print(self.text)
    # 回调数据输出到文本框
    self.textEdit.setText(self.text);


if __name__ == "__main__":
  app = QtWidgets.QApplication(sys.argv)
  mTestQtFromC = TestQtFromC()
  mTestQtFromC.show()
  sys.exit(app.exec_())

第三部分:运行效果图

点击click就可刷新界面了

python之线程通过信号pyqtSignal刷新ui的方法

以上这篇python之线程通过信号pyqtSignal刷新ui的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
python enumerate函数的使用方法总结
Nov 15 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
Python 从相对路径下import的方法
Dec 04 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
centos7中安装python3.6.4的教程
Dec 11 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
对python多线程中Lock()与RLock()锁详解
Jan 11 #Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 #Python
Python设计模式之组合模式原理与用法实例分析
Jan 11 #Python
python通过配置文件共享全局变量的实例
Jan 11 #Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 #Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 #Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 #Python
You might like
Smarty+QUICKFORM小小演示
2007/02/25 PHP
php 静态变量的初始化
2009/11/15 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
php图片添加水印例子
2016/07/20 PHP
PDO::quote讲解
2019/01/29 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
js闭包的用途详解
2014/11/09 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
python面试题小结附答案实例代码
2019/04/11 Python
基于python实现地址和经纬度转换
2020/05/19 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
清洁工岗位职责
2014/01/29 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
乌镇导游词
2015/02/02 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android