许多 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 函数
def refresh_data():
import random
return f"Refreshed: {random.randint(1000, 9999)}"
refresh_btn.click(refresh_data, outputs=textbox)clear_btn.click(
None,
inputs=[],
outputs=textbox,
js="() => ''"
)您可以对同一个按钮使用 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 列表中出现的顺序渲染