import gradio as gr with gr.Blocks() as demo: turn = gr.Textbox("X", interactive=False, label="Turn") board = gr.Dataframe(value=[["", "", ""]] * 3, interactive=False, type="array") def place(board: list[list[int]], turn, evt: gr.SelectData): # type: ignore if evt.value: return board, turn board[evt.index[0]][evt.index[1]] = turn turn = "O" if turn == "X" else "X" return board, turn board.select(place, [board, turn], [board, turn], show_progress="hidden") if __name__ == "__main__": demo.launch()