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 datetime时间格式化去掉前导0
Jul 31 Python
python通过定义一个类实例作为ftp回调方法
May 04 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
python实现图片中文字分割效果
Jul 22 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
ASP.NET Core中的配置详解
Feb 05 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
一个程序下载的管理程序(一)
2006/10/09 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
jquery foreach使用示例
2013/09/12 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
js实现登录验证码
2016/12/22 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
Django中Middleware中的函数详解
2019/07/18 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Python列表切片常用操作实例解析
2019/12/16 Python
Python类继承和多态原理解析
2020/02/05 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
记者岗位职责
2014/01/06 职场文书
工作岗位说明书模板
2014/05/09 职场文书
敬老院标语
2014/06/27 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
雷锋观后感
2015/06/10 职场文书
歌咏比赛主持词
2015/06/29 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB