入门 Eva J Patel(freeCodeCamp) 2026-09-10 16:14:02 · 0 阅读

第6章 Gradio 组件

Gradio 提供了大量组件,用来构建交互式界面。

你不需要把它们全部记住。事实上,试图记住每个组件都是在浪费时间。

更好的做法是:理解主要组件各自的用途,并学会如何配置它们。

掌握了这个模式之后,之后查某个具体参数就会容易得多。

Textbox

Textbox 是最常用的组件之一。

text = gr.Textbox()

它既可以接收用户输入的文本,也可以显示应用生成的文本。

更详细的写法是:

text = gr.Textbox(
    label="Your Question",
    placeholder="Ask a question...",
    lines=5
)

文本框适用于:

  • 姓名

  • 问题

  • 提示词

  • 描述

  • 段落

  • 代码

  • 生成的回复

  • 摘要

  • 错误信息

Number

当应用需要输入数字时,就用 gr.Number

number = gr.Number(
    label="Enter a number"
)

也可以指定默认值:

number = gr.Number(
    label="Quantity",
    value=1
)

如果值本质上是数字,用 Number 比文本框更合适。

Slider

滑块让用户在一个范围内选择数值。

temperature = gr.Slider(
    minimum=0,
    maximum=100,
    value=50,
    label="Temperature"
)

当用户需要从连续或有界的数值范围中取值时,滑块就很有用。

例如:

  • 置信度阈值

  • 百分比

  • 图像亮度

  • 生成参数设置

  • 音量

  • 各类数值参数

Slider Steps

你可以控制滑块每次移动的步长。

gr.Slider(
    minimum=0,
    maximum=1,
    value=0.5,
    step=0.1
)

这样可选的值就是诸如:

0.0
0.1
0.2
0.3
...
1.0

对于需要按固定步长变化的参数,这种方式非常实用。

Dropdown

下拉框允许用户从列表中选择一个选项。

model = gr.Dropdown(
    choices=["Model A", "Model B", "Model C"],
    label="Choose a model"
)

可以设置默认值:

model = gr.Dropdown(
    choices=["Model A", "Model B", "Model C"],
    value="Model A",
    label="Choose a model"
)

当选项较多、全部平铺显示会占用过多空间时,下拉框尤其适用。

Radio

Radio 适合用户需要从少量选项中单选的场景。

language = gr.Radio(
    choices=["Python", "JavaScript", "Java"],
    label="Programming Language"
)

选项只有几个且需要始终可见时,Radio 比下拉框更方便。

Checkbox

复选框表示一个布尔型选择。

subscribe = gr.Checkbox(
    label="Subscribe to updates"
)

Python 函数接收到的值为布尔值:

True

或:

False

例如:

def get_status(subscribed):
    if subscribed:
        return "You are subscribed."

    return "You are not subscribed."

CheckboxGroup

当用户可以同时选择多个选项时,使用复选框组。

interests = gr.CheckboxGroup(
    choices=[
        "AI",
        "Web Development",
        "Data Science",
        "Cybersecurity"
    ],
    label="Choose your interests"
)

函数会接收到所有被选中的值。

适用于需要同时勾选多项的表单场景。

Button

按钮用于触发动作。

button = gr.Button("Submit")

按钮与事件结合后尤为实用:

button.click(
    fn=process,
    inputs=input_component,
    outputs=output_component
)

按钮还可以根据界面设计风格采用不同的视觉变体。

例如:

gr.Button(
    "Submit",
    variant="primary"
)

具体可用的变体取决于你使用的 Gradio 版本,依赖某个特定样式时请查阅最新文档。

Markdown

Gradio 可以在界面中直接渲染 Markdown。

gr.Markdown(
    "# Welcome\n\nThis is my Gradio application."
)

以下场景尤其适用:

  • 标题层级

  • 操作说明

  • 功能解释

  • 文档内容

  • 状态提示

  • 格式化排版

只需加上清晰的 Markdown 分区,应用的整体观感就能提升不少。

HTML

当 Markdown 不够用时,Gradio 也支持直接嵌入 HTML。

gr.HTML(
    "<h1>My Application</h1>"
)

动态 HTML 要特别小心,尤其是处理用户输入的内容时。切勿假设任意用户输入都可以安全地直接拼进 HTML。

JSON

JSON 组件适合展示结构化数据。

假设你的 Python 函数返回:

{
    "name": "Eva",
    "score": 95,
    "passed": True
}

用如下方式展示:

output = gr.JSON(
    label="Result"
)

在处理返回结构化信息的 API 和机器学习系统时,这个组件特别实用。

Dataframe

Gradio 同样支持以表格形式展示数据。

table = gr.Dataframe(
    headers=["Name", "Score"],
    datatype=["str", "number"]
)

Dataframe 可用于:

  • 数据分析

  • CSV 处理

  • 结果表格

  • 数据集展示

  • 预测结果

  • 统计报表

例如:

import gradio as gr

def create_data():
    return [
        ["Alice", 92],
        ["Bob", 87],
        ["Charlie", 95]
    ]

with gr.Blocks() as demo:
    button = gr.Button("Load Data")
    table = gr.Dataframe(
        headers=["Name", "Score"],
        datatype=["str", "number"]
    )

    button.click(
        fn=create_data,
        outputs=table
    )

demo.launch()

File

File 组件允许用户上传文件。

file = gr.File(
    label="Upload a file"
)

常用于上传:

  • PDF

  • 文本文档

  • CSV 文件

  • JSON 文件

  • 图片

  • 数据集

  • 其他支持的文件类型

文件处理值得单独用一章来讲,我们后面会再回到这个话题。

Image

Image 组件允许用户上传或提供图片。

image = gr.Image(
    label="Upload an image"
)

适用于:

  • 图像分类

  • 目标检测

  • 图像编辑

  • OCR

  • 计算机视觉

  • 图像生成工作流

图像类型

处理图像时,你可能会遇到不同的数据表示形式。

例如,根据组件配置和 Gradio 版本的不同,你的函数可能接收到 NumPy 数组或其他支持的表示形式。

在需要时,你可以配置组件使用特定的类型。

比如:

image = gr.Image(
    type="numpy"
)

或者使用其他支持的输入类型。

具体行为和可用选项在 Gradio 各版本之间可能有所变化,构建生产应用时请查阅当前文档。

Audio

Gradio 提供了 Audio 组件。

audio = gr.Audio(
    label="Upload audio"
)

音频组件可用于:

  • 语音识别

  • 语音转录

  • 音频分类

  • 声音分析

  • 语音交互界面

根据你的应用需求,可以配置让用户上传音频、录音,或两者都支持。

Video

视频处理:

video = gr.Video(
    label="Upload video"
)

由此可以实现:

  • 视频分类

  • 帧提取

  • 视频分析

  • 目标跟踪

  • 教育工具

Chatbot

针对对话类应用,Gradio 提供了 Chatbot 组件。

chatbot = gr.Chatbot()

Chatbot 组件可以展示对话消息。

结合 Blocks 构建自定义对话界面时尤其方便。

后续我们会介绍 gr.ChatInterface,它能以更简洁的方式创建聊天应用。

ColorPicker

需要用户选择颜色时,Gradio 提供了颜色选择器。

color = gr.ColorPicker(
    label="Choose a color"
)

适用于自定义工具、可视化应用、设计工具等交互场景。

DateTime

有些应用需要获取日期和时间信息。

使用 DateTime 组件即可让用户便捷地选择,无需手动输入。

适用于:

  • 日程安排

  • 时间戳选择

  • 规划工具

  • 时间序列分析

Code

Code 组件用于展示或接收代码。

示例:

code = gr.Code(
    language="python",
    label="Python Code"
)

在教育应用和开发者工具中尤为实用。

比如做一个 Python 代码解释器:用户粘贴代码,即可获得解释。

Label

Label 组件适合展示分类结果。

例如,模型可能返回:

{
    "cat": 0.91,
    "dog": 0.07,
    "rabbit": 0.02
}

标签式输出可以直观地展示分类结果。

应用生成多张图片时,Gallery 组件能将它们集中展示。

gallery = gr.Gallery(
    label="Generated Images"
)

适用于以下场景:

  • 图像生成

  • 搜索结果

  • 照片处理

  • 图像对比

  • 视觉数据集

音频、图像和视频本质上仍是数据

媒体组件和文本、数字看起来完全不同,容易让人以为处理逻辑也截然不同。

但从应用角度看,它们只是另一种形式的输入数据。

例如:

def process_image(image):
    ...

图像直接传入 Python 函数。

同理:

def transcribe(audio):
    ...

音频传入函数即可。

关键问题始终是:你的函数期望接收什么?想清楚这一点,组件选型就简单多了。

组件配置

Gradio 组件通常暴露大量参数。

例如:

gr.Textbox(
    label="Prompt",
    placeholder="Enter your prompt...",
    lines=5,
    max_lines=10
)

不必记住每个参数。先关注影响应用行为和可用性的那几个,其他配置选项随时可以查。

选对组件

假设需要用户输入年龄:

gr.Textbox()

也行,但

gr.Number()

通常更合适。

假设需要选择类别:

gr.Dropdown()

更合理。

假设可以多选兴趣:

gr.CheckboxGroup()

更贴切。

假设需要上传 PDF:

gr.File()

即可满足。

目标不是尽可能多地使用组件,而是为用户的任务选择最合适的组件。

组合使用组件

真实应用很少只包含一个组件。

以一个情感分析器为例:

import gradio as gr

def analyze_sentiment(text):
    return "Positive"

with gr.Blocks() as demo:
    gr.Markdown("# Sentiment Analyzer")

    text = gr.Textbox(
        label="Enter text",
        lines=6
    )

    button = gr.Button("Analyze")

    result = gr.Label(
        label="Sentiment"
    )

    button.click(
        fn=analyze_sentiment,
        inputs=text,
        outputs=result
    )

demo.launch()

注意,每个组件各司其职。

Markdown 负责介绍应用,文本框接收输入,按钮触发操作,标签展示预测结果。

这已经是一个小而完整的用户界面了。

动手练习

创建一个简单的“学生档案”应用。

它应包含:

  • 一个姓名文本框

  • 一个年级下拉框

  • 一个兴趣复选框组

  • 一个最爱编程语言单选组

  • 一个按钮

  • 以及一个 Markdown 或文本框输出

函数应根据所选内容生成一段简短的个人简介。

重点在于理解组件之间如何连接,而不是把界面做得多么美观。

要点总结

Gradio 为多种用户交互场景提供了组件。

  • TextboxNumberSliderDropdown 覆盖了大多数常见输入场景。

  • Checkbox 表示布尔选择。

  • CheckboxGroup 支持多选。

  • FileImageAudioVideo 处理媒体和上传内容。

  • MarkdownJSONDataframeLabelGallery 是常用的输出组件。

组件可以通过标签、默认值、占位符、可见性等属性进行配置。

应根据应用实际涉及的数据和交互需求来选择合适的组件。

评论 (0)