import gradio as gr # 전역 상태를 유지하는 변수 state = {"question": "", "recordings": [], "comments": []} # 선생님의 질문 입력 받기 def teacher_question(question): state["question"] = question state["recordings"] = [] state["comments"] = [] return question # 학생들의 음성 녹음 및 저장 def record_student_voice(voice): if state["question"]: state["recordings"].append(voice) return f"Voice recorded successfully for question: {state['question']}" else: return "Please submit a question first." # 댓글 저장 def write_comment(comment): if state["question"]: state["comments"].append(comment) return f"Comment added successfully for question: {state['question']}" else: return "Please submit a question first." # Gradio 인터페이스 정의 with gr.Blocks() as demo: with gr.Tab("Teacher's Question"): question_input = gr.Textbox(lines=2, placeholder="Enter your question here...", label="Teacher's Question") submit_question = gr.Button("Submit") output_question = gr.Markdown(value="Question will appear here after submission") submit_question.click(fn=teacher_question, inputs=question_input, outputs=output_question) with gr.Tab("Record Voice"): question_display = gr.Markdown(value="Question will appear here after submission") voice_input = gr.Audio(type="numpy", label="Record your voice") submit_voice = gr.Button("Submit Voice") output_voice = gr.Markdown(value="Status will appear here after submission") submit_voice.click(fn=record_student_voice, inputs=voice_input, outputs=output_voice) with gr.Tab("Write Comment"): comment_display = gr.Markdown(value="Question will appear here after submission") comment_input = gr.Textbox(placeholder="Your comment", label="Comment") submit_comment = gr.Button("Submit Comment") output_comment = gr.Markdown(value="Status will appear here after submission") submit_comment.click(fn=write_comment, inputs=comment_input, outputs=output_comment) # 업데이트 함수 정의 def update_question_display(): return state["question"] # 페이지 로드 시 질문 업데이트 demo.load(fn=update_question_display, outputs=[output_question, question_display, comment_display]) submit_question.click(fn=update_question_display, outputs=[output_question, question_display, comment_display]) demo.launch()