0°

QNetworkReply模块

reply.downloadProgress.connect(
    lambda received, total: self.on_progress(self.req.request_id, received, total)
)

是 PyQt 网络模块中 QNetworkReply 的信号连接部分。我们来一一拆解:

📌 reply.downloadProgress 是什么?

它是 QNetworkReply 类发出的一个信号(Signal),当下载数据过程中有进展时就会被触发。

📌 信号参数:receivedtotal

  • 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(...) 方法,
  • 传入参数包括:
    1. 请求的唯一 ID(self.req.request_id)→ 用于标识是哪一个请求在传输。
    2. 当前接收字节数(received
    3. 总字节数(total

✅ 实际用途

你可以用它来:

  • 显示进度条(比如 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 示例,结合 QNetworkAccessManagerQProgressBar。需要吗?

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论