python GUI庫圖形界面開發(fā)之PyQt5多線程中信號(hào)與槽的詳細(xì)使用方法與實(shí)例
PyQt5簡單多線程信號(hào)與槽的使用
最簡單的多線程使用方法是利用QThread函數(shù),展示QThread函數(shù)和信號(hào)簡單結(jié)合的方法
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Main(QWidget):
def __init__( self, parent=None ):
super(Main, self).__init__(parent)
#創(chuàng)建一個(gè)線程實(shí)例并設(shè)置名稱 變量 信號(hào)與槽
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):
#自定義信號(hào)參數(shù)為str類型
sinOut = pyqtSignal(str)
def __init__( self, parent=None ):
super(MyThread, self).__init__(parent)
#初始化名稱為空
self.identity = None
def setIdentity( self, text ):
#設(shè)置多線程名稱
self.identity=text
def setVal( self, val ):
#接受數(shù)據(jù),運(yùn)行多線程
self.times = int(val)
self.run()
def run( self ):
#當(dāng)次數(shù)大于0以及名稱不為空時(shí)執(zhí)行代碼
while self.times>0 and self.identity:
#發(fā)射信號(hào),觸發(fā)打印函數(shù),次數(shù)-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_())
運(yùn)行如下

主線程與子線程的使用
有時(shí)候在開發(fā)程序時(shí)會(huì)經(jīng)常執(zhí)行一些耗時(shí)的操作,這樣就會(huì)導(dǎo)致界面卡頓,這也是多線程的應(yīng)用范圍之一,這樣我們就可以創(chuàng)建多線程,使用主線程更新界面,使用子線程后臺(tái)處理數(shù)據(jù),最后將結(jié)果顯示在界面上
import sys,time
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class BackQthread(QThread):
#自定義信號(hào)為str參數(shù)類型
update_date=pyqtSignal(str)
def run( self ):
while True:
#獲得當(dāng)前系統(tǒng)時(shí)間
data=QDateTime.currentDateTime()
#設(shè)置時(shí)間顯示格式
curTime=data.toString('yyyy-MM-dd hh:mm:ss dddd')
#發(fā)射信號(hào)
self.update_date.emit(str(curTime))
#睡眠一秒
time.sleep(1)
class window(QDialog):
def __init__(self):
super(window, self).__init__()
#設(shè)置標(biāo)題與初始大小
self.setWindowTitle('PyQt5界面實(shí)時(shí)更新的例子')
self.resize(400,100)
#實(shí)例化文本輸入框及其初始大小
self.input=QLineEdit(self)
self.input.resize(400,100)
self.initUI()
def initUI( self ):
#實(shí)例化對(duì)象
self.backend=BackQthread()
#信號(hào)連接到界面顯示槽函數(shù)
self.backend.update_date.connect(self.handleDisplay)
#多線程開始
self.backend.start()
def handleDisplay( self,data ):
#設(shè)置單行文本框的文本
self.input.setText(data)
if __name__ == '__main__':
app=QApplication(sys.argv)
win=window()
win.show()
sys.exit(app.exec_())
運(yùn)行程序,效果如下

本文主要講解了PyQt5多線程中信號(hào)與槽的詳細(xì)使用方法與實(shí)例,更多關(guān)于PyQt5信號(hào)與槽的知識(shí)請(qǐng)查看下面的相關(guān)鏈接
- 詳解PyQt5中Thread多線程的使用
- Python Pyqt5多線程更新UI代碼實(shí)例(防止界面卡死)
- 詳解PyQt5 GUI 接收UDP數(shù)據(jù)并動(dòng)態(tài)繪圖的過程(多線程間信號(hào)傳遞)
- Pyqt5 實(shí)現(xiàn)多線程文件搜索的案例
- PyQt5多線程防卡死和多窗口用法的實(shí)現(xiàn)
- 利用PyQt中的QThread類實(shí)現(xiàn)多線程
- PyQt5中多線程模塊QThread使用方法的實(shí)現(xiàn)
- PYQT5開啟多個(gè)線程和窗口,多線程與多窗口的交互實(shí)例
- PyQt 異步任務(wù)多線程的幾種方案示例詳解
相關(guān)文章
python如何解析配置文件并應(yīng)用到項(xiàng)目中
這篇文章主要介紹了python如何解析配置文件并應(yīng)用到項(xiàng)目中,如果我們更換了電腦也可以繼續(xù)使用原來的文件,只要把里面的數(shù)據(jù)拷貝到游戲執(zhí)行的配置文件里面就可以了,我們重新再進(jìn)入就不用重新設(shè)置內(nèi)掛的配置了,需要的朋友可以參考下2019-06-06
Python連接PostgreSQL數(shù)據(jù)庫的方法
大家應(yīng)該都有所了解,python可以操作多種數(shù)據(jù)庫,諸如SQLite、MySql、PostgreSQL等,這里不對(duì)所有的數(shù)據(jù)庫操作方法進(jìn)行贅述,只針對(duì)目前項(xiàng)目中用到的PostgreSQL做一下簡單介紹,主要是Python連接PostgreSQL數(shù)據(jù)庫的方法。有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-11-11
python使用append合并兩個(gè)數(shù)組的方法
這篇文章主要介紹了python使用append合并兩個(gè)數(shù)組的方法,涉及Python中append方法的使用技巧,需要的朋友可以參考下2015-04-04
基于opencv和pillow實(shí)現(xiàn)人臉識(shí)別系統(tǒng)(附demo)
人臉識(shí)別就是一個(gè)程序能識(shí)別給定圖像或視頻中的人臉,本文主要介紹了opencv和pillow實(shí)現(xiàn)人臉識(shí)別系統(tǒng),本文不涉及分類器、訓(xùn)練識(shí)別器等算法原理,感興趣的可以了解一下2021-11-11

