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 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
Python类的专用方法实例分析
Jan 09 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
举例讲解Python设计模式编程中的访问者与观察者模式
Jan 26 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
对Python中gensim库word2vec的使用详解
May 08 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
Python中整数的缓存机制讲解
Feb 16 Python
Python json读写方式和字典相互转化
Apr 18 Python
Python urllib3软件包的使用说明
Nov 18 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
php自定义错误处理用法实例
2015/03/20 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
Vue.js弹出模态框组件开发的示例代码
2017/07/26 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现端口转发器的方法
2015/03/13 Python
初步解析Python下的多进程编程
2015/04/28 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
股权收购意向书
2014/04/01 职场文书
代理人委托书
2014/08/01 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python