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中的__SLOTS__属性使用示例
Feb 18 Python
Python的re模块正则表达式操作
May 25 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
Python使用filetype精确判断文件类型
Jul 02 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
Django 实现购物车功能的示例代码
Oct 08 Python
浅析python的优势和不足之处
Nov 20 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
python TCP包注入方式
May 05 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
python中if嵌套命令实例讲解
Feb 25 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 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
进一步理解Python中的函数编程
2015/04/13 Python
python中enumerate函数用法实例分析
2015/05/20 Python
django之session与分页(实例讲解)
2017/11/13 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
python实现按日期归档文件
2021/01/30 Python
H5页面适配iPhoneX(就是那么简单)
2019/12/02 HTML / CSS
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
中英文求职信范文
2014/01/27 职场文书
环保倡议书范文
2014/05/12 职场文书
婚礼秀策划方案
2014/05/19 职场文书
部门2014年度工作总结
2014/11/12 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
SQL CASE 表达式的具体使用
2022/03/21 SQL Server