visibility_test / run.py
freddyaboulton's picture
Upload folder using huggingface_hub
9ffd45e verified
import gradio as gr
def toggle_visibility(choice, input_text):
"""Toggle visibility based on choice and return current input value."""
updates = {}
if choice == "Visible":
updates["textbox"] = gr.update(visible=True)
updates["button"] = gr.update(visible=True)
elif choice == "Hidden (in DOM)":
updates["textbox"] = gr.update(visible="hidden")
updates["button"] = gr.update(visible="hidden")
else: # "Not Visible (removed)"
updates["textbox"] = gr.update(visible=False)
updates["button"] = gr.update(visible=False)
return updates["textbox"], updates["button"], f"Current value: {input_text}"
def get_value(input_text):
"""Get the current value from the textbox."""
return f"Retrieved value: {input_text}"
def increment_counter(counter):
"""Increment counter to test event handling."""
return counter + 1
with gr.Blocks() as demo:
gr.Markdown("# Visibility Test Demo")
gr.Markdown(
"Test the three visibility states: visible=True, visible='hidden', visible=False"
)
with gr.Row():
visibility_radio = gr.Radio(
["Visible", "Hidden (in DOM)", "Not Visible (removed)"],
label="Choose visibility state",
value="Visible",
elem_id="visibility-radio",
)
with gr.Row():
with gr.Column():
textbox = gr.Textbox(
label="Test Input",
value="Initial text",
elem_id="test-textbox",
visible=True,
)
button = gr.Button("Get Value", elem_id="test-button", visible=True)
# Hidden counter for testing events on hidden elements
counter = gr.Number(value=0, visible="hidden", elem_id="counter")
increment_btn = gr.Button(
"Increment Counter",
elem_id="increment-button",
)
counter_result = gr.Textbox(
label="Counter Result", elem_id="counter-result"
)
with gr.Column():
status = gr.Textbox(label="Status", elem_id="status-output")
output = gr.Textbox(label="Output", elem_id="output-textbox")
# Wire up the events
visibility_radio.change(
toggle_visibility,
inputs=[visibility_radio, textbox],
outputs=[textbox, button, status],
)
button.click(get_value, inputs=textbox, outputs=output)
counter.change(
lambda x: f"Counter Result: {x}", inputs=counter, outputs=counter_result
)
increment_btn.click(increment_counter, inputs=counter, outputs=counter)
if __name__ == "__main__":
demo.launch()