第一部分: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