欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-17 23:59:46
第一部分:ui界面设计 界面效果图如下: ui文件(可拉动控件自行创建一个button和text)

第一部分: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的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。