首页 > 编程 > Python > 正文

python之线程通过信号pyqtSignal刷新ui的方法

2019-11-25 13:30:05
字体:
来源:转载
供稿:网友

第一部分: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, QtWidgetsclass 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, QtCorefrom testqt.TEST_QT_FROM import Ui_Dialogimport sysfrom PyQt5.QtCore import *import time# 继承QThreadclass 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的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表