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两个整数相除得到浮点数值的方法
Mar 18 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
浅谈Python中的私有变量
Feb 28 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
python多线程下信号处理程序示例
May 31 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
python中round函数保留两位小数的方法
Dec 04 Python
Python Matplotlib库实现画局部图
Nov 17 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(5) 类和对象
2010/02/16 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python程序慢的重要原因
2020/09/04 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
关于建议书的格式范文
2014/05/20 职场文书
台风停课通知
2015/04/24 职场文书
教师个人教学反思
2016/02/23 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书