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 相关文章推荐
Python面向对象编程中的类和对象学习教程
Mar 30 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
Python星号*与**用法分析
Feb 02 Python
Python3中详解fabfile的编写
Jun 24 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
python面向对象实现名片管理系统文件版
Apr 26 Python
利用python开发app实战的方法
Jul 09 Python
python+rsync精确同步指定格式文件
Aug 29 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
python实现连连看游戏
Feb 14 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
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
CI框架中zip类应用示例
2014/06/17 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
js自定义事件代码说明
2011/01/31 Javascript
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python random模块用法解析及简单示例
2017/12/18 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
django 修改server端口号的方法
2018/05/14 Python
python如何提升爬虫效率
2020/09/27 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
几个常见的消息中间件(MOM)
2014/01/08 面试题
初中生操行评语大全
2014/04/24 职场文书
经典团队口号大全
2014/06/21 职场文书
公司年夜饭通知
2015/04/25 职场文书
入党群众意见范文
2015/06/02 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书