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显示进度条的方法
Sep 20 Python
Python二维码生成库qrcode安装和使用示例
Dec 16 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
详解Django解决ajax跨域访问问题
Aug 24 Python
Python读取指定日期邮件的实例
Feb 01 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
Django的models中on_delete参数详解
Jul 16 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
python实现翻译word表格小程序
Feb 27 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
Pytest allure 命令行参数的使用
Apr 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常用Stream函数集介绍
2013/06/24 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
ExtJS 入门
2010/10/29 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
python创建临时文件夹的方法
2015/07/06 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
Python面向对象之Web静态服务器
2019/09/03 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
入党申请自荐书范文
2014/02/11 职场文书
现金出纳岗位职责
2014/03/15 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
大学生励志演讲稿
2014/04/25 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
大学四年个人总结
2015/03/03 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸