PyQt 中用 QtNetwork 异步发起HTTP请求

本文介绍了如何在PyQt中利用QtNetwork模块进行异步HTTP请求,以避免GUI界面卡死问题。重点讲解了QHttp类的GET请求、文件保存、头部信息处理、Cookie管理和QNetworkAccessManager的使用,强调了PyQt中使用urllib可能造成的界面卡死问题,并对比了QtNetwork的便捷性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引子

最近有需求要在 PyQt 中请求一个链接, 因为比较简单直接用 urllib2 处理了, 但是 urllib2 在 有延时的时候会造成 GUI 界面卡死. 所以今天研究研究 QtNetwork 模块.

QtNetwork 中的请求在 PyQt 中都是异步的.

简单的请求 QHttp

发起一个GET请求

PyQt4.QtNetwork.QHttp 可以发起一个简单请求, 需要注意的是这个对象需要通过调用 setHost 设置请求主机, 然后 调用 get/post 传入 path 才能正常使用.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt4 import QtGui, QtCore, QtNetwork


class MainWidget(QtGui.QWidget):

    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent=parent)

        self.http = QtNetwork.QHttp(parent=self)

        # 绑定 done 信号
        self.http.done.connect(self.on_req_done)

        self.url = QtCore.QUrl("http://linuxzen.com/")

        # 设置主机
        self.http.setHost(self.url.host(), self.url.port(80))
        self.getId = self.http.get(self.url.path())

    def on_req_done(self, error):
        if not error:
            print "Success"
            print self.http.readAll()
        else:
            print "Error"


if __name__ == "__main__":
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值