PyQt5入門(二十一)訊號與槽(下)
阿新 • • 發佈:2021-02-15
技術標籤:PyQt5用partial物件傳遞引數用Lambda表示式傳遞引數pyqt5訊號與槽自動連線pyqt5多執行緒更新UI資料pyqt5為視窗新增訊號
目錄
一.為視窗新增訊號
本質就是為一個類新增訊號,只不過這個類是視窗類。
程式碼:
import sys,math from PyQt5.QtWidgets import * from PyQt5.QtCore import * class WinSignal(QWidget): #定義一個訊號 btn_clicked_signal=pyqtSignal() def __init__(self): super(WinSignal, self).__init__() self.setWindowTitle('為視窗新增訊號') self.resize(300,100) btn=QPushButton('關閉視窗',self) btn.clicked.connect(self.btn_clicked) self.btn_clicked_signal.connect(self.btn_close) #起觸發函式作用的槽函式 def btn_clicked(self): self.btn_clicked_signal.emit() #關閉視窗作用的槽函式 def btn_close(self): self.close() if __name__=='__main__': app=QApplication(sys.argv) main=WinSignal() main.show() sys.exit(app.exec_())
執行結果:
二.多執行緒更新UI資料
在兩個執行緒中傳遞資料。
程式碼:
import sys,math import time from PyQt5.QtWidgets import QApplication,QDialog,QLineEdit from PyQt5.QtCore import QThread,pyqtSignal,QDateTime class BackendThread(QThread): #更新日期的訊號 update_date=pyqtSignal(str) def run(self): while True: date=QDateTime.currentDateTime() currentTime=date.toString('yyyy-MM-dd hh:mm:ss') #訊號引數是當前時間 self.update_date.emit(str(currentTime)) time.sleep(1)#隔1s就傳送一次訊號 class ThreadUpdateUI(QDialog): def __init__(self): QDialog.__init__(self) self.setWindowTitle('多執行緒更新UI資料') self.resize(400,100) #存放當前時間 self.input=QLineEdit(self) self.input.resize(400,100) self.initUI() def initUI(self): self.backend=BackendThread() self.backend.update_date.connect(self.handleDisplay) self.backend.start()#開啟執行緒,自動呼叫run # 槽函式是主執行緒 def handleDisplay(self,data): #data是當前時間 self.input.setText(data) if __name__=='__main__': app=QApplication(sys.argv) main=ThreadUpdateUI() main.show() sys.exit(app.exec_())
執行結果:
三.訊號與槽自動連線
程式碼:
執行結果:
四.用Lambda表示式為槽函式傳遞引數
程式碼:
執行結果:
五.用partial物件為槽函式傳遞引數
程式碼:
執行結果: