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中使用pyhook实现键盘监控的例子
Jul 18 Python
python新手经常遇到的17个错误分析
Jul 30 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Django框架实现逆向解析url的方法
Jul 04 Python
详解python深浅拷贝区别
Jun 24 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
python tkinter基本属性详解
Sep 16 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
Python使用tkinter制作在线翻译软件
Feb 22 Python
openstack中的rpc远程调用的方法
Jul 09 Python
实操Python爬取觅知网素材图片示例
Nov 27 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 操作文件的一些FAQ总结
2009/02/12 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
js几个验证函数代码
2010/03/25 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python异常处理例题整理
2019/07/07 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
Python 如何在字符串中插入变量
2020/08/01 Python
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
大学毕业后的十年规划
2014/01/07 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
4s店活动策划方案
2014/08/25 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
门市房租房协议书
2014/12/04 职场文书
先进党组织事迹材料
2014/12/26 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
Pygame Time时间控制的具体使用详解
2021/11/17 Python