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 13 Python
Python代码实现KNN算法
Dec 20 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
对python append 与浅拷贝的实例讲解
May 04 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
Django之模型层多表操作的实现
Jan 08 Python
Python collections模块使用方法详解
Aug 28 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
python中如何使用insert函数
Jan 09 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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 5.3.5安装memcache注意事项小结
2011/04/12 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
JS Timing
2007/04/21 Javascript
javascript 数组的方法集合
2008/06/05 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
python脚本实现查找webshell的方法
2014/07/31 Python
Django的信号机制详解
2017/05/05 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
python标准库OS模块详解
2020/03/10 Python
Python如何在bool函数中取值
2020/09/21 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
python中四舍五入的正确打开方式
2021/01/18 Python
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
飘柔洗发水广告词
2014/03/14 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
冰峪沟导游词
2015/02/09 职场文书
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP