QThread
是 PyQt 中用于在后臺線程中執行代碼的類。它允許你避免阻塞 GUI 線程,從而提高應用程序的響應性。以下是如何在 PyQt5 中使用 QThread
的基本步驟:
import sys
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
Worker
類,該類繼承自 QThread
。在這個類中,你可以定義一個或多個信號,這些信號將在工作完成時發出。同時,將需要在線程中執行的代碼放在 run()
方法中:class Worker(QThread):
# 定義一個信號,用于通知主線程任務已完成
task_finished = pyqtSignal()
def __init__(self):
super().__init__()
def run(self):
# 在這里執行你的任務
# ...
# 任務完成后,發出信號
self.task_finished.emit()
QThread
實例和一個 Worker
實例。將 Worker
實例設置為 QThread
的父對象,這樣它們就會在同一個線程中運行:class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 創建一個 QThread 實例
self.thread = QThread()
# 創建一個 Worker 實例
self.worker = Worker()
# 將 Worker 實例設置為 QThread 的父對象
self.worker.moveToThread(self.thread)
# 連接信號和槽函數
self.thread.started.connect(self.worker.run)
self.worker.task_finished.connect(self.on_task_finished)
# 設置主窗口的布局和其他控件
# ...
on_task_finished()
方法,該方法將在 Worker
類的 task_finished
信號發出時被調用。在這個方法中,你可以更新 GUI 或執行其他需要在主線程中完成的操作: def on_task_finished(self):
# 在這里更新 GUI 或執行其他操作
print("任務已完成")
main()
函數中,創建一個 QApplication
實例,并顯示主窗口:def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
現在,當你啟動應用程序時,Worker
類的實例將在單獨的線程中運行,而不會阻塞 GUI 線程。當 Worker
完成其任務時,它將發出 task_finished
信號,從而觸發 on_task_finished()
方法的執行。