File size: 5,991 Bytes
b8e024e
1
{"cells": [{"cell_type": "markdown", "id": "302934307671667531413257853548643485645", "metadata": {}, "source": ["# Gradio Demo: event_trigger"]}, {"cell_type": "code", "execution_count": null, "id": "272996653310673477252411125948039410165", "metadata": {}, "outputs": [], "source": ["!pip install -q gradio "]}, {"cell_type": "code", "execution_count": null, "id": "288918539441861185822528903084949547379", "metadata": {}, "outputs": [], "source": ["# Downloading files from the demo repo\n", "import os\n", "os.mkdir('img')\n", "!wget -q -O img/a.jpg https://github.com/gradio-app/gradio/raw/main/demo/event_trigger/img/a.jpg\n", "!wget -q -O img/b.jpg https://github.com/gradio-app/gradio/raw/main/demo/event_trigger/img/b.jpg\n", "os.mkdir('mp4')\n", "!wget -q -O mp4/a.mp4 https://github.com/gradio-app/gradio/raw/main/demo/event_trigger/mp4/a.mp4\n", "!wget -q -O mp4/b.mp4 https://github.com/gradio-app/gradio/raw/main/demo/event_trigger/mp4/b.mp4"]}, {"cell_type": "code", "execution_count": null, "id": "44380577570523278879349135829904343037", "metadata": {}, "outputs": [], "source": ["# %%\n", "import gradio as gr\n", "\n", "TEST_VIDEO_A = \"mp4/a.mp4\"\n", "TEST_VIDEO_B = \"mp4/b.mp4\"\n", "\n", "TEST_IMAGE_A = \"img/a.jpg\"\n", "TEST_IMAGE_B = \"img/b.jpg\"\n", "\n", "def alert_change(component, value):\n", "    print(f\"Detected {component} change, {type(value)}\")\n", "\n", "    if type(value) == list or type(value) == str:\n", "        print(value)\n", "\n", "def change_interactive(state):\n", "    return gr.Video(interactive=not state), not state\n", "\n", "with gr.Blocks() as demo:\n", "    with gr.Tab(label=\"Text change\"):\n", "        with gr.Row():\n", "            with gr.Column():\n", "                textbox1 = gr.Textbox()\n", "                textbox2 = gr.Textbox(interactive=True)\n", "\n", "            with gr.Column():\n", "                btn = gr.Button()\n", "\n", "        def btn_click(state):\n", "            return state\n", "\n", "        def text_change(value):\n", "            print(\"text_change\", value)\n", "\n", "        btn.click(fn=btn_click, inputs=textbox1, outputs=textbox2)\n", "        textbox2.change(fn=alert_change, inputs=[gr.State(\"Text\"), textbox2])\n", "\n", "    with gr.Tab(label=\"Video change, play, pause\"):\n", "        with gr.Row():\n", "            with gr.Column():\n", "                radio1 = gr.Radio(\n", "                    choices=[TEST_VIDEO_A, TEST_VIDEO_B],\n", "                    interactive=True,\n", "                    type=\"index\",\n", "                )\n", "\n", "                video_btn = gr.Button(\"Change interactive\")\n", "\n", "            with gr.Column():\n", "                video1 = gr.Video(value=TEST_VIDEO_A, interactive=False)\n", "                video1_interactive = gr.State(value=False)\n", "\n", "        def change_video(index):\n", "            if index == 0:\n", "                return TEST_VIDEO_A\n", "            elif index == 1:\n", "                return TEST_VIDEO_B\n", "\n", "        def video_play():\n", "            print(\"video_play\")\n", "\n", "        def video_pause():\n", "            print(\"video_pause\")\n", "\n", "        def video_stop():\n", "            print(\"video_stop\")\n", "\n", "        def video_end():\n", "            print(\"video_end\")\n", "\n", "        video1.play(fn=video_play)\n", "        video1.pause(fn=video_pause)\n", "        video1.stop(fn=video_stop)\n", "        video1.end(fn=video_end)\n", "\n", "        radio1.change(fn=change_video, inputs=radio1, outputs=video1)\n", "        video1.change(fn=alert_change, inputs=[gr.State(\"Video\"), video1])\n", "\n", "        video_btn.click(\n", "            fn=change_interactive,\n", "            inputs=video1_interactive,\n", "            outputs=[video1, video1_interactive],\n", "        )\n", "\n", "    with gr.Tab(label=\"Image change\"):\n", "        with gr.Row():\n", "            with gr.Column():\n", "                radio2 = gr.Radio(\n", "                    choices=[TEST_IMAGE_A, TEST_IMAGE_B],\n", "                    interactive=True,\n", "                    type=\"index\",\n", "                )\n", "\n", "            with gr.Column():\n", "                image1 = gr.Image(value=TEST_IMAGE_A, interactive=True)\n", "\n", "        def change_image(index):\n", "            if index == 0:\n", "                return TEST_IMAGE_A\n", "            elif index == 1:\n", "                return TEST_IMAGE_B\n", "\n", "        radio2.change(fn=change_image, inputs=radio2, outputs=image1)\n", "        image1.change(fn=alert_change, inputs=[gr.State(\"Image\"), image1])\n", "\n", "    with gr.Tab(label=\"File\"):\n", "        with gr.Row():\n", "            with gr.Column():\n", "                radio3 = gr.Radio(\n", "                    choices=[\"A\", \"B\", \"AB\"],\n", "                    interactive=True,\n", "                    type=\"index\",\n", "                )\n", "\n", "                file_btn = gr.Button(\"Change interactive\")\n", "\n", "            with gr.Column():\n", "                file1 = gr.File(\n", "                    value=[TEST_IMAGE_A, TEST_IMAGE_B],\n", "                    interactive=False,\n", "                    file_count=\"multiple\",\n", "                )\n", "                file1_interactive = gr.State(value=False)\n", "\n", "        def change_file(index):\n", "            if index == 0 or index == 1:\n", "                return [TEST_IMAGE_A]\n", "            elif index == 2:\n", "                return [TEST_IMAGE_A, TEST_IMAGE_B]\n", "\n", "        radio3.change(fn=change_file, inputs=radio3, outputs=file1)\n", "        file1.change(fn=alert_change, inputs=[gr.State(\"File\"), file1])\n", "\n", "        file_btn.click(\n", "            fn=change_interactive,\n", "            inputs=file1_interactive,\n", "            outputs=[file1, file1_interactive],\n", "        )\n", "\n", "demo.launch()\n"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5}