Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| state_a = gr.State(0) | |
| btn_a = gr.Button("Increment A") | |
| value_a = gr.Number(label="Number A") | |
| btn_a.click(lambda x: x + 1, state_a, state_a) | |
| state_a.change(lambda x: x, state_a, value_a) | |
| with gr.Row(): | |
| state_b = gr.State(0) | |
| btn_b = gr.Button("Increment B") | |
| value_b = gr.Number(label="Number B") | |
| btn_b.click(lambda x: x + 1, state_b, state_b) | |
| def identity(x): | |
| return x | |
| def render(a, b): | |
| for x in range(a): | |
| with gr.Row(): | |
| for y in range(b): | |
| gr.Button(f"Button {x}, {y}") | |
| list_state = gr.State([]) | |
| dict_state = gr.State(dict()) | |
| nested_list_state = gr.State([]) | |
| set_state = gr.State(set()) | |
| def transform_list(x): | |
| return {n: n for n in x}, [x[:] for _ in range(len(x))], set(x) | |
| list_state.change( | |
| transform_list, | |
| inputs=list_state, | |
| outputs=[dict_state, nested_list_state, set_state], | |
| ) | |
| all_textbox = gr.Textbox(label="Output") | |
| click_count = gr.Number(label="Clicks") | |
| change_count = gr.Number(label="Changes") | |
| gr.on( | |
| inputs=[change_count, dict_state, nested_list_state, set_state], | |
| triggers=[dict_state.change, nested_list_state.change, set_state.change], | |
| fn=lambda x, *args: (x + 1, "\n".join(str(arg) for arg in args)), | |
| outputs=[change_count, all_textbox], | |
| ) | |
| count_to_3_btn = gr.Button("Count to 3") | |
| count_to_3_btn.click(lambda: [1, 2, 3], outputs=list_state) | |
| zero_all_btn = gr.Button("Zero All") | |
| zero_all_btn.click(lambda x: [0] * len(x), inputs=list_state, outputs=list_state) | |
| gr.on( | |
| [count_to_3_btn.click, zero_all_btn.click], | |
| lambda x: x + 1, | |
| click_count, | |
| click_count, | |
| ) | |
| async def increment(x): | |
| yield x + 1 | |
| n_text = gr.State(0) | |
| add_btn = gr.Button("Iterator State Change") | |
| add_btn.click(increment, n_text, n_text) | |
| def render_count(count): | |
| for i in range(int(count)): | |
| gr.Markdown(value = f"Success Box {i} added", key=i) | |
| class CustomState(): | |
| def __init__(self, val): | |
| self.val = val | |
| def __hash__(self) -> int: | |
| return self.val | |
| custom_state = gr.State(CustomState(5)) | |
| with gr.Row(): | |
| btn_10 = gr.Button("Set State to 10") | |
| custom_changes = gr.Number(0, label="Custom State Changes") | |
| custom_clicks = gr.Number(0, label="Custom State Clicks") | |
| custom_state.change(increment, custom_changes, custom_changes) | |
| def set_to_10(cs: CustomState): | |
| cs.val = 10 | |
| return cs | |
| btn_10.click(set_to_10, custom_state, custom_state).then( | |
| increment, custom_clicks, custom_clicks | |
| ) | |
| def render_state_changes(): | |
| with gr.Row(): | |
| box1 = gr.Textbox(label="Start State") | |
| state1 = gr.State() | |
| box2 = gr.Textbox() | |
| state2 = gr.State() | |
| box3 = gr.Textbox(label="End State") | |
| iden = lambda x: x | |
| box1.change(iden, box1, state1) | |
| state1.change(iden, state1, box2) | |
| box2.change(iden, box2, state2) | |
| state2.change(iden, state2, box3) | |
| if __name__ == "__main__": | |
| demo.launch() | |