# %% import gradio as gr TEST_VIDEO_A = "mp4/a.mp4" TEST_VIDEO_B = "mp4/b.mp4" TEST_IMAGE_A = "img/a.jpg" TEST_IMAGE_B = "img/b.jpg" def alert_change(component, value): print(f"Detected {component} change, {type(value)}") if type(value) == list or type(value) == str: print(value) def change_interactive(state): return gr.Video(interactive=not state), not state with gr.Blocks() as demo: with gr.Tab(label="Text change"): with gr.Row(): with gr.Column(): textbox1 = gr.Textbox() textbox2 = gr.Textbox(interactive=True) with gr.Column(): btn = gr.Button() def btn_click(state): return state def text_change(value): print("text_change", value) btn.click(fn=btn_click, inputs=textbox1, outputs=textbox2) textbox2.change(fn=alert_change, inputs=[gr.State("Text"), textbox2]) with gr.Tab(label="Video change, play, pause"): with gr.Row(): with gr.Column(): radio1 = gr.Radio( choices=[TEST_VIDEO_A, TEST_VIDEO_B], interactive=True, type="index", ) video_btn = gr.Button("Change interactive") with gr.Column(): video1 = gr.Video(value=TEST_VIDEO_A, interactive=False) video1_interactive = gr.State(value=False) def change_video(index): if index == 0: return TEST_VIDEO_A elif index == 1: return TEST_VIDEO_B def video_play(): print("video_play") def video_pause(): print("video_pause") def video_stop(): print("video_stop") def video_end(): print("video_end") video1.play(fn=video_play) video1.pause(fn=video_pause) video1.stop(fn=video_stop) video1.end(fn=video_end) radio1.change(fn=change_video, inputs=radio1, outputs=video1) video1.change(fn=alert_change, inputs=[gr.State("Video"), video1]) video_btn.click( fn=change_interactive, inputs=video1_interactive, outputs=[video1, video1_interactive], ) with gr.Tab(label="Image change"): with gr.Row(): with gr.Column(): radio2 = gr.Radio( choices=[TEST_IMAGE_A, TEST_IMAGE_B], interactive=True, type="index", ) with gr.Column(): image1 = gr.Image(value=TEST_IMAGE_A, interactive=True) def change_image(index): if index == 0: return TEST_IMAGE_A elif index == 1: return TEST_IMAGE_B radio2.change(fn=change_image, inputs=radio2, outputs=image1) image1.change(fn=alert_change, inputs=[gr.State("Image"), image1]) with gr.Tab(label="File"): with gr.Row(): with gr.Column(): radio3 = gr.Radio( choices=["A", "B", "AB"], interactive=True, type="index", ) file_btn = gr.Button("Change interactive") with gr.Column(): file1 = gr.File( value=[TEST_IMAGE_A, TEST_IMAGE_B], interactive=False, file_count="multiple", ) file1_interactive = gr.State(value=False) def change_file(index): if index == 0 or index == 1: return [TEST_IMAGE_A] elif index == 2: return [TEST_IMAGE_A, TEST_IMAGE_B] radio3.change(fn=change_file, inputs=radio3, outputs=file1) file1.change(fn=alert_change, inputs=[gr.State("File"), file1]) file_btn.click( fn=change_interactive, inputs=file1_interactive, outputs=[file1, file1_interactive], ) demo.launch()