import gradio as gr with gr.Blocks() as demo: gr.Markdown( """ # Animal Generator Once you select a species, the detail panel should be visible. """ ) species = gr.Radio(label="Animal Class", choices=["Mammal", "Fish", "Bird"]) animal = gr.Dropdown(label="Animal", choices=[]) with gr.Column(visible=False) as details_col: weight = gr.Slider(0, 20) details = gr.Textbox(label="Extra Details") generate_btn = gr.Button("Generate") output = gr.Textbox(label="Output") species_map = { "Mammal": ["Elephant", "Giraffe", "Hamster"], "Fish": ["Shark", "Salmon", "Tuna"], "Bird": ["Chicken", "Eagle", "Hawk"], } def filter_species(species): return gr.Dropdown( choices=species_map[species], value=species_map[species][1] ), gr.Column(visible=True) species.change(filter_species, species, [animal, details_col]) def filter_weight(animal): if animal in ("Elephant", "Shark", "Giraffe"): return gr.Slider(maximum=100) else: return gr.Slider(maximum=20) animal.change(filter_weight, animal, weight) weight.change(lambda w: gr.Textbox(lines=int(w / 10) + 1), weight, details) generate_btn.click(lambda x: x, details, output) if __name__ == "__main__": demo.launch()