import gradio as gr import json json_data = """ { "tests": { "test1": { "questions": [ {"text": "Выберите А", "correct_answer": "А", "incorrect_text": "Правильный ответ - А."}, {"text": "Выберите Б", "correct_answer": "Б", "incorrect_text": "Правильный ответ - Б."} ] }, "test2": { "questions": [ {"text": "Выберите В", "correct_answer": "В", "incorrect_text": "Правильный ответ - В."}, {"text": "Выберите А", "correct_answer": "А", "incorrect_text": "Правильный ответ - А."} ] } } } """ data = json.loads(json_data) def show_questions(test_name): questions = data['tests'][test_name]['questions'] return {f"question{i+1}": gr.update(visible=True, label=question['text'], info=question['text']) for i, question in enumerate(questions)}, gr.update(visible=False) def check(answers, test_name): questions = data['tests'][test_name]['questions'] results = [] for answer, question in zip(answers, questions): if answer == question['correct_answer']: results.append("✔️") else: results.append(f"✖️ ({question['incorrect_text']})") return "\n".join(results), gr.update(visible=True) def reset(questions): return {f"question{i+1}": gr.update(visible=False) for i in range(len(questions))}, gr.update(visible=True) css = """ footer {visibility: hidden !important;} """ with gr.Blocks(css=css, theme='YTheme/TehnoX') as vui: with gr.Row(): test_selector = gr.Radio(label="Выберите тест", choices=list(data['tests'].keys())) select_button = gr.Button("Выбрать") questions = [gr.Radio(label="", choices=["А", "Б", "В"], visible=False) for _ in range(len(max(data['tests'].values(), key=lambda t: len(t['questions']))['questions']))] submit_button = gr.Button("Проверить", visible=False) back_button = gr.Button("Назад", visible=False) result_output = gr.Markdown(visible=False) select_button.click(show_questions, inputs=[test_selector], outputs=[questions, select_button]) submit_button.click(check, inputs=questions + [test_selector], outputs=[result_output, submit_button]) back_button.click(reset, inputs=[questions], outputs=[questions, test_selector]) vui.launch()