- Kivy 教程
- Kivy - 首页
- Kivy 基础
- Kivy - 入门
- Kivy - 安装
- Kivy - 架构
- Kivy - 文件语法
- Kivy - 应用程序
- Kivy - Hello World
- Kivy - 应用生命周期
- Kivy - 事件
- Kivy - 属性
- Kivy - 输入
- Kivy - 行为
- Kivy 按钮
- Kivy - 按钮
- Kivy - 按钮事件
- Kivy - 按钮颜色
- Kivy - 按钮大小
- Kivy - 按钮位置
- Kivy - 圆形按钮
- Kivy - 禁用按钮
- Kivy - 图片按钮
- Kivy 小部件
- Kivy - 小部件
- Kivy - 标签
- Kivy - 文本输入
- Kivy - 画布
- Kivy - 线
- Kivy - 复选框
- Kivy - 下拉列表
- Kivy - 窗口
- Kivy - 滚动视图
- Kivy - 走马灯
- Kivy - 滑块
- Kivy - 图片
- Kivy - 弹出窗口
- Kivy - 开关
- Kivy - 微调器
- Kivy - 分隔器
- Kivy - 进度条
- Kivy - 气泡
- Kivy - 标签页面板
- Kivy - 散点图
- Kivy - 手风琴
- Kivy - 文件选择器
- Kivy - 颜色拾取器
- Kivy - 代码输入
- Kivy - 模态视图
- Kivy - 切换按钮
- Kivy - 相机
- Kivy - 树视图
- Kivy - reStructuredText
- Kivy - 操作栏
- Kivy - 播放器
- Kivy - 模板视图
- Kivy - 虚拟键盘
- Kivy - 触摸波纹
- Kivy - 音频
- Kivy - 视频
- Kivy - 拼写检查
- Kivy - 效果
- Kivy - 输入记录器
- Kivy - OpenGL
- Kivy - 文本
- Kivy - 文本标记
- Kivy - 设置
- Kivy 布局
- Kivy - 布局
- Kivy - 浮动布局
- Kivy - 网格布局
- Kivy - 箱式布局
- Kivy - 堆叠布局
- Kivy - 锚点布局
- Kivy - 相对布局
- Kivy - 页面布局
- Kivy - 回收布局
- Kivy - 布局嵌套
- Kivy 高级概念
- Kivy - 配置对象
- Kivy - 图集
- Kivy - 数据加载器
- Kivy - 缓存管理器
- Kivy - 控制台
- Kivy - 动画
- Kivy - 多笔画
- Kivy - 时钟
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪贴板
- Kivy - 工厂
- Kivy - 手势
- Kivy - 语言
- Kivy - 图形
- Kivy - 绘制
- Kivy - 打包
- Kivy - 花园
- Kivy - 存储
- Kivy - 向量
- Kivy - 工具
- Kivy - 检查器
- Kivy - 工具
- Kivy - 日志记录器
- Kivy - 帧缓冲区
- Kivy 应用程序和项目
- Kivy - 绘图应用程序
- Kivy - 计算器应用程序
- Kivy - 计时器应用程序
- Kivy - 相机处理
- Kivy - 图片查看器
- Kivy - 贝塞尔曲线
- Kivy - 画布压力测试
- Kivy - 圆形绘制
- Kivy - 小部件动画
- Kivy - 其他
- Kivy 有用资源
- Kivy - 快速指南
- Kivy - 有用资源
- Kivy - 讨论
Kivy - UrlRequest
Kivy 框架中的 UrlRequest 类允许您对网络进行异步请求,并在请求完成后获取结果。其功能与 JavaScript 中的 XHR 对象相同。
UrlRequest 类定义在 "kivy.network.urlrequest" 模块中。构造函数只需要一个名为 "url" 的必填参数。该类继承了 Python threading 模块中的 Thread 类。
UrlRequest 构造函数的参数如下:
url - 表示要调用的完整 URL 字符串。
on_success - 获取结果后要调用的回调函数。
on_redirect - 如果服务器返回重定向,则要调用的回调函数。
on_failure - 如果服务器返回客户端或服务器错误,则要调用的回调函数。
on_error - 如果发生错误,则要调用的回调函数。
on_progress - 将被调用的回调函数,用于报告下载进度。
on_cancel - 如果用户通过 .cancel() 方法请求取消下载操作,则要调用的回调函数。
on_finish - 请求完成后要调用的附加回调函数。
req_body - 表示要与请求一起发送的数据的字符串。如果包含此参数,则将执行 POST 操作。否则,将发送 GET 请求。
req_headers - dict,默认为 None。要添加到请求的自定义标头。
chunk_size - 要读取的每个块的大小,仅在设置了 on_progress 回调时使用。
timeout - 一个整数,如果设置,阻塞操作将在这么多秒后超时。
method - 要使用的 HTTP 方法,默认为 'GET'(如果指定了 body,则为 'POST')。
decode - bool,默认为 True。如果为 False,则跳过响应的解码。
debug - bool,默认为 False。
auth - HTTPBasicAuth,默认为 None。如果设置,请求将使用基本身份验证进行身份验证。
UrlRequest 对象的 cancel() 方法取消当前请求,并将调用回调 on_cancel。
示例
首先,我们设计一个用户界面,其中包含一个包含 httpbin.org URL(带有多个参数)的微调器,两个只读文本框 - 一个显示获取的 URL 结果,另一个显示响应标头的 JSON 字符串。在它们之间放置了一个 Image 小部件。如果 content_type 为图像类型,则它会显示图像。这些小部件放置在一个垂直的 box 布局中。
布局使用以下 kv 语言脚本构建。
#:import json json BoxLayout: orientation: 'vertical' TextInput: id: ti hint_text: 'type url or select from dropdown' size_hint_y: None height: 48 multiline: False BoxLayout: size_hint_y: None height: 48 Spinner: id: spinner text: 'select' values: [ 'http://httpbin.org/ip', 'http://httpbin.org/headers', 'http://httpbin.org/delay/3', 'https://httpbin.org/image/png', ] on_text: ti.text = self.text Button: text: 'GET' on_press: app.fetch_content(ti.text) size_hint_x: None width: 50 TextInput: readonly: True text: app.result_text Image: source: app.result_image nocache: True TextInput readonly: True text: json.dumps(app.headers, indent=2)
Kivy App 类代码如下所示。它基本上向 httpbin.org 发送不同的 HTTP 请求。httpbin.org 是一种简单的 HTTP 请求和响应服务。该应用程序将 UrlRequest 的结果存储在三个字符串变量中,并在小部件中显示。
当从下拉菜单中选择 URL 并按下 GET 按钮时,它将调用 fetch_content() 方法并收集响应。
如果响应标头包含 content_type 为图像,则 Image 小部件将加载图像。
from kivy.lang import Builder from kivy.app import App from kivy.network.urlrequest import UrlRequest from kivy.properties import NumericProperty, StringProperty, DictProperty import json from kivy.core.window import Window Window.size = (720,400) class UrlExample(App): status = NumericProperty() result_text = StringProperty() result_image = StringProperty() headers = DictProperty() def build(self): pass def fetch_content(self, url): self.cleanup() UrlRequest( url, on_success=self.on_success, on_failure=self.on_failure, on_error=self.on_error ) def cleanup(self): self.result_text = '' self.result_image = '' self.status = 0 self.headers = {} def on_success(self, req, result): self.cleanup() headers = req.resp_headers content_type = headers.get('content-type', headers.get('Content-Type')) if content_type.startswith('image/'): fn = 'tmpfile.{}'.format(content_type.split('/')[1]) with open(fn, 'wb') as f: f.write(result) self.result_image = fn else: if isinstance(result, dict): self.result_text = json.dumps(result, indent=2) else: self.result_text = result self.status = req.resp_status self.headers = headers def on_failure(self, req, result): self.cleanup() self.result_text = result self.status = req.resp_status self.headers = req.resp_headers def on_error(self, req, result): self.cleanup() self.result_text = str(result) UrlExample().run()
输出
运行以上代码。从微调器下拉菜单中选择 'http://httpbin.org/headers' 并按下 GET 按钮。您应该在文本框中看到响应标头。
选择 'https://httpbin.org/image/png' URL。将显示图像,如下所示。
在微调器下拉菜单中的选项之一是指向客户端 IP 地址的 URL。从列表中选择 'http://httpbin.org/ip'。将显示 IP 地址,如下所示: