博主原文链接:https://www.yourmetaverse.cn/nlp/246/
Gradio Blocks:自定义交互式Web应用和演示
Gradio是一个强大的库,提供了多种方法来构建交互式Web应用和演示。其中之一是Gradio的Blocks模块,它允许您创建比接口更加自定义的Web应用和演示,完全在Python中实现。本文将介绍Gradio的Blocks模块,探讨其灵活性和控制能力,并提供示例和详细的参数介绍。
1. 引言
Gradio的Blocks模块是Gradio的低级API,它允许您创建比接口更加自定义的Web应用和演示。相比于Interface类,Blocks提供了更多的灵活性和控制,包括组件的布局、触发函数执行的事件以及数据流(例如,输入可以触发输出,输出可以触发下一级的输出)。Blocks还提供了将相关的演示组合在一起的方法,例如使用选项卡。
2. 基本用法
使用Blocks的基本步骤如下:创建一个Blocks对象,然后将其用作上下文(使用"with"语句),在Blocks上下文中定义布局、组件或事件。最后,调用launch()方法启动演示。
以下是一个示例:
import gradio as grdef update(name):return f"Welcome to Gradio, {name}!"with gr.Blocks() as demo:gr.Markdown("Start typing below and then click **Run** to see the output.")with gr.Row():inp = gr.Textbox(placeholder="What is your name?")out = gr.Textbox()btn = gr.Button("Run")btn.click(fn=update, inputs=inp, outputs=out)demo.launch()
在这个示例中,我们使用Blocks创建了一个简单的界面,包含一个文本输入框和一个按钮。当用户在文本框中输入内容并点击按钮时,按钮的点击事件会触发update函数,并将输入文本作为参数传递给它。然后,update函数返回一个欢迎消息,该消息将显示在输出文本框中。
3. 参数介绍
下面是Blocks的参数介绍:
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
theme | Theme | str | None | None | 主题对象或表示主题的字符串。如果是字符串,将查找具有该名称的内置主题(例如"soft"或"default"),或尝试从HF Hub加载主题(例如"gradio/monochrome")。如果为None,将使用默认主题。 |
analytics_enabled | bool | None | None | 是否允许基本的遥测。如果为None,将使用GRADIO_ANALYTICS_ENABLED环境变量的值,或默认为True。 |
mode | str | “blocks” | Blocks或Interface的人类友好名称。 |
title | str | None | “Gradio” | 在输入和输出组件上方显示的标题。同时也用作在浏览器窗口中打开时的标签标题。 |
css | str | None | None | 自定义CSS样式或自定义CSS文件的路径,应用于整个Blocks。 |
下面是Blocks的launch方法的参数介绍:
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
inline | bool|None | None | 是否在界面中以iframe内联方式显示。在Python笔记本中默认为True;其他情况下默认为False。 |
inbrowser | bool | False | 是否在默认浏览器中自动打开界面的新标签页。 |
share | bool|None | None | 是否为界面创建一个公开可分享的链接。创建一个SSH隧道,使您的界面可以从任何地方访问。如果未提供,默认设置为False,除非在Google Colab中运行。当本地主机不可访问时(例如在Google Colab中),不支持设置share=False。 |
debug | bool | False | 如果为True,则阻塞主线程运行。在Google Colab中运行时,需要设置为True以打印单元格输出中的错误信息。 |
enable_queue | bool|None | None | 已弃用(请使用.queue()方法代替)。如果为True,则推理请求将通过队列而不是并行线程进行处理。在需要较长的推理时间(>1分钟)时,使用队列来防止超时。HuggingFace Spaces的默认选项是True。其他情况下的默认选项是False。 |
max_threads | int | 40 | Gradio应用程序可以并行生成的最大线程数。默认值继承自starlette库(当前为40)。无论队列是否启用,都适用。但如果启用了队列,则将增加此参数的值,至少为队列的concurrency_count。 |
auth | Callable|tuple[str, str]|list[tuple[str, str]]|None | None | 如果提供,需要用户名和密码(或用户名-密码元组列表)来访问界面。也可以提供一个函数,该函数接受用户名和密码并返回True表示有效登录。 |
auth_message | str|None | None | 如果提供,登录页面上显示的HTML消息。 |
prevent_thread_lock | bool | False | 如果为True,界面将在服务器运行时阻塞主线程。 |
show_error | bool | False | 如果为True,界面中的任何错误将显示在警告模态框中,并打印在浏览器控制台日志中。 |
server_name | str|None | None | 若要在本地网络上使应用程序可访问,将其设置为"0.0.0.0"。可以通过环境变量GRADIO_SERVER_NAME进行设置。如果为None,则使用"127.0.0.1"。 |
server_port | int|None | None | 将Gradio应用程序启动在此端口(如果可用)。可以通过环境变量GRADIO_SERVER_PORT进行设置。如果为None,则从7860开始搜索可用端口。 |
show_tips | bool | False | 如果为True,将定期显示有关Gradio新功能的提示。 |
height | int | 500 | 包含界面的iframe元素的高度(如果inline=True)。 |
width | int|str | “100%” | 包含界面的iframe元素的宽度(如果inline=True)。 |
encrypt | bool|None | None | 已弃用,无效果。 |
favicon_path | str|None | None | 如果提供文件的路径(.png、.gif或.ico),将其用作网页的favicon。 |
ssl_keyfile | str|None | None | 如果提供了文件的路径,将使用该路径作为私钥文件来创建运行在https上的本地服务器。 |
ssl_certfile | str|None | None | 如果提供文件的路径,将其用作https的签名证书。如果提供了ssl_keyfile,必须提供此参数。 |
ssl_keyfile_password | str|None | None | 如果提供密码,将与https的ssl证书一起使用。 |
ssl_verify | bool | True | 如果为False,则跳过证书验证,允许使用自签名证书。 |
quiet | bool | False | 如果为True,则抑制大部分打印语句。 |
show_api | bool | True | 如果为True,则在界面的页脚显示API文档。默认为True。如果启用了队列,则由.queue()的api_open参数确定是否显示API文档,与show_api的值无关。 |
file_directories | list[str]|None | None | 已更名为allowed_paths。将在将来的版本中删除。 |
allowed_paths | list[str]|None | None | 可以由Gradio公开访问的完整文件路径或父目录列表(除了包含Gradio Python文件的目录)。必须是绝对路径。警告:如果提供了目录,则这些目录及其子目录中的任何文件都可供您的应用程序的所有用户访问。 |
blocked_paths | list[str]|None | None | 不允许Gradio提供访问的完整文件路径或父目录列表(即,您的应用程序的用户不允许访问)。必须是绝对路径。警告:此参数优先于allowed_paths和Gradio默认公开的所有其他目录。 |
root_path | str | “” | 应用程序的根路径(或“挂载点”),如果它不是从域的根路径(“/”)提供的。通常在应用程序位于反向代理后面,将请求转发到应用程序时使用。例如,如果应用程序位于"https://example.com/myapp"上提供,则将root_path设置为“/myapp”。 |
app_kwargs | dict[str, Any]|None | None | 作为参数键和参数值的字典,附加到底层FastAPI应用程序中的额外关键字参数。例如,{"docs_url": "/docs"} 。 |
4. 总结
Gradio的Blocks模块是一个强大的工具,可用于创建自定义的交互式Web应用和演示。通过使用Blocks,您可以实现更灵活和可控的布局、事件触发和数据流,以满足您的特定需求。