PyQt5學(xué)習(xí)之QThread類的使用詳解
PyQt5 QThread
QThread是Qt線程類中最核心的底層類。要使用QThrea開始一個線程,可以創(chuàng)建它的一個子類,然后覆蓋其QThread.run()函數(shù)。
class Thread(QThread):
def _init_(self):
super(Thread, self)._init_()
def run(self):
# 線程相關(guān)代碼
pass
thread = Thread()
thread.start()
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class MainWidget(QWidget):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)
self.setWindowTitle("QThread Demo")
self.thread = Worker()
self.listFile = QListWidget()
self.btnStart = QPushButton("開始")
layout = QGridLayout(self)
layout.addWidget(self.listFile, 0, 0, 1, 2)
layout.addWidget(self.btnStart, 1, 1)
self.btnStart.clicked.connect(self.slotStart)
self.thread.sinOut.connect(self.slotAdd)
def slotAdd(self, file_info):
self.listFile.addItem(file_info)
def slotStart(self):
self.btnStart.setEnabled(False)
self.thread.start()
class Worker(QThread):
sinOut = pyqtSignal(str)
def __init__(self, parent=None):
super(Worker, self).__init__(parent)
self.working = True
self.num = 0
def __del__(self):
self.working = False
self.wait()
def run(self):
while self.working == True:
file_str = 'File index {0}'.format(self.num)
self.num += 1
self.sinOut.emit(file_str)
self.sleep(2)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MainWidget()
win.show()
sys.exit(app.exec_())

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
global sec
sec=0
class WorkThread(QThread):
trigger = pyqtSignal()
def __int__(self):
super(WorkThread,self).__init__()
def run(self):
for i in range(10000000):
pass
# 循環(huán)完畢后發(fā)出信號
self.trigger.emit()
def countTime():
global sec
sec += 1
# LED顯示數(shù)字+1
lcdNumber.display(sec)
def work():
# 計時器每秒計數(shù)
timer.start(1000)
# 計時開始
workThread.start()
# 當(dāng)獲得循環(huán)完畢的信號時,停止計數(shù)
workThread.trigger.connect(timeStop)
def timeStop():
timer.stop()
print("運行結(jié)束用時",lcdNumber.value())
global sec
sec=0
if __name__ == "__main__":
app = QApplication(sys.argv)
top = QWidget()
top.resize(300,120)
# 垂直布局類QVBoxLayout
layout = QVBoxLayout(top)
# 加個顯示屏
lcdNumber = QLCDNumber()
layout.addWidget(lcdNumber)
button = QPushButton("測試")
layout.addWidget(button)
timer = QTimer()
workThread = WorkThread()
button.clicked.connect(work)
# 每次計時結(jié)束,觸發(fā) countTime
timer.timeout.connect(countTime)
top.show()
sys.exit(app.exec_())
事件處理processEvents
在耗時程序時不斷調(diào)用QApplication.processEvents()就可以實現(xiàn)一邊執(zhí)行耗時程序,一邊刷新UI頁面的功能。
import sys
import time
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QListWidget, QGridLayout
class WinForm(QWidget):
def __init__(self, parent=None):
super(WinForm, self).__init__(parent)
self.setWindowTitle("實時刷新頁面Demo")
self.listFile = QListWidget()
self.btnStart = QPushButton('開始')
layout = QGridLayout(self)
layout.addWidget(self.listFile, 0, 0, 1, 2)
layout.addWidget(self.btnStart, 1, 1)
self.btnStart.clicked.connect(self.slotAdd)
self.setLayout(layout)
def slotAdd(self):
for n in range(10):
str_n = 'File index {0}'.format(n)
self.listFile.addItem(str_n)
QApplication.processEvents()
time.sleep(1)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = WinForm()
win.show()
sys.exit(app.exec_())
到此這篇關(guān)于PyQt5學(xué)習(xí)之QThread類的使用詳解的文章就介紹到這了,更多相關(guān)PyQt5 QThread類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Elasticsearches的集群搭建及數(shù)據(jù)分片過程詳解
這篇文章主要為大家介紹了Elasticsearches的集群搭建及數(shù)據(jù)分片過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
Python數(shù)據(jù)分析之PMI數(shù)據(jù)圖形展示
這篇文章主要介紹了Python數(shù)據(jù)分析之PMI數(shù)據(jù)圖形展示,文章介紹了簡單的python爬蟲,并使用numpy進行了簡單的數(shù)據(jù)處理,最終使用?matplotlib?進行圖形繪制,實現(xiàn)了直觀的方式展示制造業(yè)和非制造業(yè)指數(shù)圖形,需要的朋友可以參考一下2022-05-05
Python的Flask框架及Nginx實現(xiàn)靜態(tài)文件訪問限制功能
這篇文章主要介紹了Python的Flask框架及Nginx實現(xiàn)靜態(tài)文件訪問限制功能,Nginx方面利用到了自帶的XSendfile,需要的朋友可以參考下2016-06-06
Python基礎(chǔ)語法(Python基礎(chǔ)知識點)
這篇文章主要介紹了Python基礎(chǔ)語法(Python基礎(chǔ)知識點),需要的朋友可以參考下2016-02-02
django配置DJANGO_SETTINGS_MODULE的實現(xiàn)
本文主要介紹了django配置DJANGO_SETTINGS_MODULE,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
使用python-magic和wxPython實現(xiàn)識別文檔類型
這篇文章主要介紹了如何使用python-magic模塊和wxPython庫創(chuàng)建一個簡單的文件列表應(yīng)用程序,該應(yīng)用程序可以顯示所選文件夾中文件的類型,需要的可以參考下2023-08-08

