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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
深入了解Python数据类型之列表
Jun 24 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
详解Python3中ceil()函数用法
Feb 19 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python单元测试与测试用例简析
Nov 09 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
python 常见的排序算法实现汇总
Aug 21 Python
python语言实现贪吃蛇游戏
Nov 13 Python
python中pyqtgraph知识点总结
Jan 26 Python
解决Django transaction进行事务管理踩过的坑
Apr 24 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
PHP 高手之路(一)
2006/10/09 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
JS 继承实例分析
2008/11/04 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
AngularJS学习笔记之TodoMVC的分析
2015/02/22 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
python实现多线程抓取知乎用户
2016/12/12 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
单位作风建设自查报告
2014/10/23 职场文书
总经理岗位职责范本
2015/04/01 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery