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 相关文章推荐
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
Python for循环生成列表的实例
Jun 15 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
PyQt5中向单元格添加控件的方法示例
Mar 24 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
如何基于Django实现上下文章跳转
Sep 16 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
python中的getter与setter你了解吗
Mar 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 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
php生成shtml类用法实例
2014/12/09 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
php上传excel表格并获取数据
2017/04/27 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
一个超级简单的python web程序
2014/09/11 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
Python自动创建Excel并获取内容
2020/09/16 Python
python Paramiko使用示例
2020/09/21 Python
几道Java和数据库的面试题
2013/05/30 面试题
酒店服务实习自我鉴定
2013/09/22 职场文书