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

时间:2022-06-21 02:44:36

第一部分:ui界面设计

界面效果图如下:

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

ui文件(可拉动控件自行创建一个button和text)

python" id="highlighter_997879">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?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文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- 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"))

第二部分:主要逻辑代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/IKNOWNU/article/details/83790074