当前位置: 首页 > article >正文

【gradio】Gradio 高级功能:动态界面更新与多页面布局

Gradio 高级功能:动态界面更新与多页面布局

  • 一、动态界面更新
  • 二、多页面布局
  • 三、综合示例:动态界面与多页面结合

前言
在上一篇文章中,我们知道如何使用 Gradio 快速构建交互式前端界面,学习了其核心组件的功能。在这我们继续探讨 Gradio 的高级功能,包括 动态界面更新多页面布局

一、动态界面更新

Gradio 提供了强大的动态更新能力,允许根据用户的输入实时调整界面的布局或内容。
通过返回 Gradio 的 gr.update() 方法,可以动态更新组件的属性(如文本内容、可见性、选项值等)。
示例:动态 显示/隐藏 组件

import gradio as gr

# 定义动态更新逻辑
def toggle_visibility(choice):
    if choice == "是":
        return gr.update(visible=True)  # 显示额外输入框
    else:
        return gr.update(visible=False)  # 隐藏额外输入框

# 创建 Gradio 界面
with gr.Blocks() as demo:
    gr.Markdown("### 动态显示/隐藏组件示例")
    
    # 输入组件
    choice_input = gr.Radio(["是", "否"], label="是否显示额外输入框?")
    extra_input = gr.Textbox(label="额外输入框", visible=False)
    
    # 绑定事件
    choice_input.change(toggle_visibility, inputs=choice_input, outputs=extra_input)

# 启动界面
demo.launch()
  • 当用户选择“是”时,额外输入框会显示。
  • 当用户选择“否”时,额外输入框会隐藏。

在这里插入图片描述

二、多页面布局

Gradio 支持通过 gr.Tabgr.Accordion 等组件实现多页面布局,帮助组织复杂的界面结构。

  1. 使用 Tab 切换页面
    gr.Tab 是最常用的多页面布局方式,每个 Tab 对应一个独立的页面。

示例:多页面布局
以下代码展示了一个包含两个页面的示例。第一个页面用于文本处理,第二个页面用于图像处理。

import gradio as gr
from PIL import Image
import numpy as np

# 文本处理函数
def process_text(text):
    return text.upper()

# 图像处理函数
def process_image(image):
    gray_image = Image.fromarray(image).convert("L")  # 转换为灰度图
    return np.array(gray_image)

# 创建 Gradio 界面
with gr.Blocks() as demo:
    gr.Markdown("### 多页面布局示例")
    
    # 使用 Tab 切换页面
    with gr.Tabs():
        with gr.Tab("文本处理"):
            text_input = gr.Textbox(label="输入文本")
            text_output = gr.Textbox(label="输出文本")
            submit_text = gr.Button("提交")
            submit_text.click(process_text, inputs=text_input, outputs=text_output)
        
        with gr.Tab("图像处理"):
            image_input = gr.Image(label="上传图片", type="numpy")
            image_output = gr.Image(label="处理后的图片")
            submit_image = gr.Button("提交")
            submit_image.click(process_image, inputs=image_input, outputs=image_output)

# 启动界面
demo.launch()

运行效果
用户可以在“文本处理”页面输入文本并查看结果。
在“图像处理”页面上传图片并查看灰度化结果。

在这里插入图片描述
在这里插入图片描述
2. 使用 Accordion 实现折叠面板
gr.Accordion 是另一种多页面布局方式,适合用于折叠或展开内容。

示例:折叠面板
以下代码展示了一个包含折叠面板的示例。

import gradio as gr

# 创建 Gradio 界面
with gr.Blocks() as demo:
    gr.Markdown("### 折叠面板示例")
    
    with gr.Accordion("高级设置", open=False):  # 默认关闭
        slider = gr.Slider(0, 100, label="滑块值")
        checkbox = gr.Checkbox(label="启用高级模式")
    
    output = gr.Textbox(label="输出")
    submit = gr.Button("提交")
    
    def show_settings(slider_value, checkbox_value):
        return f"滑块值: {slider_value}, 高级模式: {checkbox_value}"
    
    submit.click(show_settings, inputs=[slider, checkbox], outputs=output)

# 启动界面
demo.launch()

在这里插入图片描述
在这里插入图片描述

三、综合示例:动态界面与多页面结合

将动态界面更新和多页面布局结合起来,模拟一个多功能的应用程序。

import gradio as gr
from PIL import Image
import numpy as np


# 文本处理函数
def process_text(text):
    return text.upper()


# 图像处理函数
def process_image(image):
    gray_image = Image.fromarray(image).convert("L")  # 转换为灰度图
    return np.array(gray_image)


# 动态更新逻辑
def toggle_visibility(choice):
    if choice == "是":
        return [gr.update(visible=True), gr.update(visible=False)]
    else:
        return [gr.update(visible=False), gr.update(visible=True)]


# 创建 Gradio 界面
with gr.Blocks() as demo:
    gr.Markdown("### 综合示例:动态界面与多页面结合")

    # 使用 Tab 切换页面
    with gr.Tabs():
        with gr.Tab("文本处理"):
            text_input = gr.Textbox(label="输入文本")
            text_output = gr.Textbox(label="输出文本")
            submit_text = gr.Button("提交")
            submit_text.click(process_text, inputs=text_input, outputs=text_output)

        with gr.Tab("图像处理"):
            image_input = gr.Image(label="上传图片", type="numpy")
            image_output = gr.Image(label="处理后的图片")
            submit_image = gr.Button("提交")
            submit_image.click(process_image, inputs=image_input, outputs=image_output)

        with gr.Tab("动态界面"):
            choice_input = gr.Radio(["是", "否"], label="是否显示额外输入框?")
            extra_input_1 = gr.Textbox(label="额外输入框 1", visible=False)
            extra_input_2 = gr.Textbox(label="额外输入框 2", visible=True)
            choice_input.change(toggle_visibility, inputs=choice_input, outputs=[extra_input_1, extra_input_2])

# 启动界面
demo.launch()

包含三个页面:文本处理、图像处理和动态界面。
动态界面页面可以根据用户选择显示或隐藏输入框。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
希望这篇文章对你有所帮助!如果有任何问题或建议,欢迎在评论区留言交流。

原文地址:https://blog.csdn.net/weixin_51086862/article/details/146398980
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/595585.html

相关文章:

  • 分享:图片识别改名,能识别图片中的文字并批量改名的工具,用WPF和阿里云来完成
  • VS Code PowerShell、Windows PowerShell、CMD 的区别与联系
  • vllm + litellm + langfuse 启动、代理、监控大模型(国内仓库)
  • C++的常用容器嵌套
  • 前端如何请求后端服务?---------nignx
  • Windows 图形显示驱动开发-WDDM 2.9功能- 支持跨适配器资源扫描 (CASO)(一)
  • 传感器研习社:Swift Navigation与意法半导体(STMicroelectronics)合作 共同推出端到端GNSS汽车自动驾驶解决方案
  • ES、Kibana一键式部署脚本执行文件,外加IK分词器和拼音分词器
  • Flink SQL 技术原理详解
  • 使用 Google Firebase 控制台和 ESP8266 NodeMCU 的物联网控制 LED
  • JavaScript实现一个函数,将数组扁平化(flatten),即把多维数组转为一维数组。
  • Visual Studio Code 连接 SAP ERP 系统
  • SpringBoot实现异步调用的方法
  • 北斗导航 | 北斗三号区域短报文相关知识总结
  • 一份针对零基础学习AI Agent详细学习计划
  • 【Ratis】Ratis Streaming概览
  • numpy学习笔记13:np.random.choice和np.cumsum的解释
  • Docker 速通(总结)
  • 【Unity基础】Unity中角色动画的三种实现方式
  • DAY13 线程池、死锁、线程状态、计时器