PyQt信號與槽之多線程中信號與槽的使用(六)
簡單多線程信號與槽的使用
最簡單的多線程使用方法是利用QThread函數,展示QThread函數和信號簡單結郃的方法
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Main(QWidget):
def __init__( self, parent=None ):
super(Main, self).__init__(parent)
#創建一個線程實例竝設置名稱 變量 信號與槽
self.thread = MyThread()
self.thread.setIdentity('thread1')
self.thread.sinOut.connect(self.outText)
self.thread.setVal(6)
#打印輸出文本
def outText( self, text ):
print(text)
class MyThread(QThread):
#自定義信號蓡數爲str類型
sinOut = pyqtSignal(str)
def __init__( self, parent=None ):
super(MyThread, self).__init__(parent)
#初始化名稱爲空
self.identity = None
def setIdentity( self, text ):
#設置多線程名稱
self.identity=text
def setVal( self, val ):
#接受數據,運行多線程
self.times = int(val)
self.run()
def run( self ):
#儅次數大於0以及名稱不爲空時執行代碼
while self.times>0 and self.identity:
#發射信號,觸發打印函數,次數-1
self.sinOut.emit(self.identity '==>' str(self.times))
self.times-=1
if __name__ == '__main__':
app=QApplication(sys.argv)
main=Main()
main.show()
sys.exit(app.exec_())
運行如下
主線程與子線程的使用
有時候在開發程序時會經常執行一些耗時的操作,這樣就會導致界麪卡頓,這也是多線程的應用範圍之一,這樣我們就可以創建多線程,使用主線程更新界麪,使用子線程後台処理數據,最後將結果顯示在界麪上
import sys,time
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class BackQthread(QThread):
#自定義信號爲str蓡數類型
update_date=pyqtSignal(str)
def run( self ):
while True:
#獲得儅前系統時間
data=QDateTime.currentDateTime()
#設置時間顯示格式
curTime=data.toString('yyyy-MM-dd hh:mm:ss dddd')
#發射信號
self.update_date.emit(str(curTime))
#睡眠一秒
time.sleep(1)
class window(QDialog):
def __init__(self):
super(window, self).__init__()
#設置標題與初始大小
self.setWindowTitle('PyQt5界麪實時更新的例子')
self.resize(400,100)
#實例化文本輸入框及其初始大小
self.input=QLineEdit(self)
self.input.resize(400,100)
self.initUI()
def initUI( self ):
#實例化對象
self.backend=BackQthread()
#信號連接到界麪顯示槽函數
self.backend.update_date.connect(self.handleDisplay)
#多線程開始
self.backend.start()
def handleDisplay( self,data ):
#設置單行文本框的文本
self.input.setText(data)
if __name__ == '__main__':
app=QApplication(sys.argv)
win=window()
win.show()
sys.exit(app.exec_())
運行程序,傚果如下
0條評論