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 httplib,smtplib使用方法
Sep 06 Python
Python 文件处理注意事项总结
Apr 10 Python
python编写微信远程控制电脑的程序
Jan 05 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
python实现五子棋小游戏
Mar 25 Python
python django model联合主键的例子
Aug 06 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
Python析构函数__del__定义原理解析
Nov 20 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代码(抓取网页中的邮箱地址)
2012/07/17 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
jquerymobile局部渲染的各种刷新方法小结
2014/03/05 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
简单介绍Python中的struct模块
2015/04/28 Python
Python Property属性的2种用法
2015/06/21 Python
Python之re操作方法(详解)
2017/06/14 Python
python对excel文档去重及求和的实例
2018/04/18 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python基于http下载视频或音频
2018/06/20 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
印度购物网站:TATA CLiQ
2017/11/23 全球购物
经典C++面试题一
2016/11/06 面试题
最新大学职业规划书范文
2013/12/30 职场文书
英文导游欢迎词
2014/01/11 职场文书
四年级科学教学反思
2014/02/10 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
业务员的岗位职责
2014/03/15 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
土地租赁协议书
2015/01/29 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
python双向链表实例详解
2022/05/25 Python