reply.downloadProgress.connect(
lambda received, total: self.on_progress(self.req.request_id, received, total)
)
是 PyQt 网络模块中 QNetworkReply
的信号连接部分。我们来一一拆解:
📌 reply.downloadProgress
是什么?
它是 QNetworkReply
类发出的一个信号(Signal),当下载数据过程中有进展时就会被触发。
📌 信号参数:received
和 total
received
:当前已经接收到的字节数(int
)。total
:服务器声明的总字节数(int
),有时候可能是-1
,表示未知大小。
例如:
received = 24576
total = 51200
表示你已经下载了 24.5KB,总共还需下载 51.2KB。
📌 lambda 表达式的作用
lambda received, total: self.on_progress(self.req.request_id, received, total)
这行代码的意思是:
- 当
downloadProgress(received, total)
信号发出时, - 调用你自定义的
self.on_progress(...)
方法, - 传入参数包括:
- 请求的唯一 ID(
self.req.request_id
)→ 用于标识是哪一个请求在传输。 - 当前接收字节数(
received
) - 总字节数(
total
)
- 请求的唯一 ID(
✅ 实际用途
你可以用它来:
- 显示进度条(比如 PyQt 的
QProgressBar
) - 打印下载进度
- 实时更新 UI 状态
💡 示例:更新进度条
假如你有一个 QProgressBar
:
def on_progress(self, request_id, received, total):
if total > 0:
percent = int(received / total * 100)
self.progress_bar.setValue(percent)
else:
self.progress_bar.setRange(0, 0) # 不确定总大小时显示“忙碌”状态
如果你想,我可以帮你写一个完整的下载进度 UI 示例,结合 QNetworkAccessManager
与 QProgressBar
。需要吗?