1. 附加功能
  2. 自定义按钮

自定义按钮

许多 Gradio 组件支持在它们的工具栏中自定义按钮,允许您添加交互式按钮来触发 Python 函数、JavaScript 函数或两者。自定义按钮会出现在组件工具栏中内置按钮(如“复制”或“下载”)的旁边。

基本用法

要向组件添加自定义按钮,请将 gr.Button() 实例列表传递给 buttons 参数

import gradio as gr

refresh_btn = gr.Button("Refresh", variant="secondary", size="sm")
clear_btn = gr.Button("Clear", variant="secondary", size="sm")

textbox = gr.Textbox(
    value="Sample text",
    label="Text Input",
    buttons=[refresh_btn, clear_btn]
)

您也可以将内置按钮(作为字符串)与自定义按钮混合使用

code = gr.Code(
    value="print('Hello')",
    language="python",
    buttons=["copy", "download", refresh_btn, export_btn]
)

连接按钮事件

自定义按钮就像常规的 gr.Button 组件一样工作。您可以使用 .click() 方法将它们连接到 Python 函数或 JavaScript 函数

Python 函数

def refresh_data():
    import random
    return f"Refreshed: {random.randint(1000, 9999)}"

refresh_btn.click(refresh_data, outputs=textbox)

JavaScript 函数

clear_btn.click(
    None,
    inputs=[],
    outputs=textbox,
    js="() => ''"
)

Python 和 JavaScript 组合

您可以对同一个按钮使用 Python 和 JavaScript 逻辑

alert_btn.click(
    None,
    inputs=textbox,
    outputs=[],
    js="(text) => { alert('Text: ' + text); return []; }"
)

完整示例

这是一个完整的示例,展示了带有 Python 和 JavaScript 函数的自定义按钮

import gradio as gr

def export_data(text):
    print("Exporting data:", text)
    return "Data exported to server!"

def refresh_data():
    import random
    return f"Refreshed content: {random.randint(1000, 9999)}"

with gr.Blocks() as demo:
    gr.Markdown("""
    # Textbox with Custom Buttons Demo
    
    This demo showcases custom buttons in a Textbox component that can trigger either (or both):
    - **Python functions** 
    - **JS functions** (with and without input parameters)
    
    You can use emojis, text, or icons for the buttons.
    """)
    
    gr.Markdown("### Textbox with Custom Buttons")
    refresh_btn = gr.Button("Refresh")
    alert_btn = gr.Button("⚠️ Alert")
    clear_btn = gr.Button("🗑️")
    
    textbox = gr.Textbox(
        value="Sample text content that can be exported, refreshed, or transformed.",
        buttons=["copy", refresh_btn, alert_btn, clear_btn],
        label="Sample Text",
        lines=5
    )
    
    output = gr.Textbox(label="Output (Python Function Result)")
        
    
    refresh_btn.click(refresh_data, outputs=textbox)
    
    alert_btn.click(
        None,
        inputs=textbox,
        outputs=[],
        js="(text) => { alert('This is a JavaScript alert!\\n\\nTextbox content: ' + text); return []; }"
    )
    
    
    clear_btn.click(
        None,
        inputs=[],
        outputs=textbox,
        js="() => ''"
    )

demo.launch()

注意事项

  • 自定义按钮会出现在组件的工具栏中,通常在右上角。
  • 仅使用按钮的 value,其他属性如 icon 不会被使用。
  • 按钮按照它们在 buttons 列表中出现的顺序渲染
  • 内置按钮(如“copy”、“download”)可以通过将其从列表中省略来隐藏
  • 自定义按钮与常规按钮以相同的方式处理组件事件
gradio