第一部分: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的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/IKNOWNU/article/details/83790074