首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不冻结PyQt GUI的情况下跟踪Python中的线程进度?

在不冻结 PyQt GUI 的情况下跟踪 Python 中的线程进度,可以使用 QThread 和信号(Signals)来实现。以下是一个简单的示例:

首先,导入所需的库:

代码语言:python
复制
from PyQt5.QtCore import QObject, pyqtSignal, QThread
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

接下来,创建一个工作线程类,该类继承自 QObject,并定义一个信号用于发送进度信息:

代码语言:python
复制
class WorkerThread(QObject):
    progress = pyqtSignal(int)

    def run(self):
        for i in range(101):
            self.progress.emit(i)
            # 模拟耗时操作
            time.sleep(0.1)

然后,创建一个 PyQt 应用程序和主窗口:

代码语言:python
复制
app = QApplication([])
window = QMainWindow()

在主窗口中添加一个按钮和一个用于显示进度的小部件:

代码语言:python
复制
start_button = QPushButton("开始")
progress_widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(start_button)
layout.addWidget(progress_widget)
window.setLayout(layout)

创建一个 QThread 实例,并将工作线程对象移动到该线程中:

代码语言:python
复制
thread = QThread()
worker = WorkerThread()
worker.moveToThread(thread)

接下来,将线程的信号与主窗口的槽(Slot)连接起来,以便在线程发送进度信息时更新 GUI:

代码语言:python
复制
worker.progress.connect(progress_widget.setValue)

最后,启动线程:

代码语言:python
复制
thread.start()

完整代码如下:

代码语言:python
复制
import sys
import time
from PyQt5.QtCore import QObject, pyqtSignal, QThread
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

class WorkerThread(QObject):
    progress = pyqtSignal(int)

    def run(self):
        for i in range(101):
            self.progress.emit(i)
            time.sleep(0.1)

app = QApplication([])
window = QMainWindow()

start_button = QPushButton("开始")
progress_widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(start_button)
layout.addWidget(progress_widget)
window.setLayout(layout)

thread = QThread()
worker = WorkerThread()
worker.moveToThread(thread)

worker.progress.connect(progress_widget.setValue)

thread.start()

window.show()
sys.exit(app.exec_())

这个示例将在不冻结 PyQt GUI 的情况下跟踪 Python 中的线程进度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券