Rooni commited on
Commit
7d21a65
·
1 Parent(s): 8b3bb66

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -20
app.py CHANGED
@@ -1,7 +1,6 @@
1
  import gradio as gr
2
  import json
3
 
4
- # Данные тестов
5
  json_data = """
6
  {
7
  "tests": {
@@ -21,42 +20,37 @@ json_data = """
21
  }
22
  """
23
 
24
- # Загрузка данных из JSON
25
  data = json.loads(json_data)
26
 
27
- # CSS для скрытия футера
 
28
  css = """
29
  footer {visibility: hidden !important;}
30
  """
31
 
32
- # Создание интерфейса
33
  with gr.Blocks(css=css, theme='YTheme/TehnoX') as demo:
34
  with gr.Row():
35
  test_selector = gr.Radio(label="Выберите тест", choices=list(data['tests'].keys()))
36
  select_button = gr.Button("Выбрать")
37
 
38
- question_blocks = []
39
- for i in range(max(len(test["questions"]) for test in data["tests"].values())):
40
- with gr.Row(visible=False) as row:
41
- question = gr.Radio(label=f"Вопрос {i+1}", choices=["А", "Б", "В"])
42
- question_blocks.append((row, question))
43
-
44
  submit_button = gr.Button("Проверить", visible=False)
45
  result_output = gr.Markdown(visible=False)
46
  back_button = gr.Button("Назад", visible=False)
47
 
48
- def show_test(test_name):
49
  questions = data['tests'][test_name]['questions']
50
- for i, (row, question) in enumerate(question_blocks):
51
  if i < len(questions):
52
- question.label = questions[i]['text']
53
- question.choices = ["А", "Б", "В"] # Обновляем варианты ответов, если они разные для каждого вопроса
54
- row.visible = True
55
  else:
56
- row.visible = False
57
  submit_button.visible = True
58
  back_button.visible = True
59
  result_output.visible = False
 
 
60
  return test_name # Возвращаем выбранный тест, чтобы использовать его в дальнейшем
61
 
62
  def check(answers, test_name):
@@ -71,8 +65,9 @@ with gr.Blocks(css=css, theme='YTheme/TehnoX') as demo:
71
  return result_text
72
 
73
  def go_back():
74
- for row, _ in question_blocks:
75
- row.visible = False
 
76
  submit_button.visible = False
77
  back_button.visible = False
78
  result_output.visible = False
@@ -80,8 +75,8 @@ with gr.Blocks(css=css, theme='YTheme/TehnoX') as demo:
80
  select_button.visible = True
81
  return "", "", "" # Сбросить все выходные данные
82
 
83
- select_button.click(fn=show_test, inputs=[test_selector], outputs=[test_selector])
84
- submit_button.click(fn=check, inputs=[question.value for _, question in question_blocks] + [test_selector], outputs=[result_output])
85
  back_button.click(fn=go_back, inputs=[], outputs=[result_output, test_selector, select_button])
86
 
87
  demo.launch()
 
1
  import gradio as gr
2
  import json
3
 
 
4
  json_data = """
5
  {
6
  "tests": {
 
20
  }
21
  """
22
 
 
23
  data = json.loads(json_data)
24
 
25
+ max_questions = max(len(test['questions']) for test in data['tests'].values())
26
+
27
  css = """
28
  footer {visibility: hidden !important;}
29
  """
30
 
 
31
  with gr.Blocks(css=css, theme='YTheme/TehnoX') as demo:
32
  with gr.Row():
33
  test_selector = gr.Radio(label="Выберите тест", choices=list(data['tests'].keys()))
34
  select_button = gr.Button("Выбрать")
35
 
36
+ question_blocks = [gr.Radio(label="", choices=["А", "Б", "В"], visible=False) for _ in range(max_questions)]
 
 
 
 
 
37
  submit_button = gr.Button("Проверить", visible=False)
38
  result_output = gr.Markdown(visible=False)
39
  back_button = gr.Button("Назад", visible=False)
40
 
41
+ def show_questions(test_name):
42
  questions = data['tests'][test_name]['questions']
43
+ for i, question_block in enumerate(question_blocks):
44
  if i < len(questions):
45
+ question_block.label = questions[i]['text']
46
+ question_block.visible = True
 
47
  else:
48
+ question_block.visible = False
49
  submit_button.visible = True
50
  back_button.visible = True
51
  result_output.visible = False
52
+ test_selector.visible = False
53
+ select_button.visible = False
54
  return test_name # Возвращаем выбранный тест, чтобы использовать его в дальнейшем
55
 
56
  def check(answers, test_name):
 
65
  return result_text
66
 
67
  def go_back():
68
+ for question_block in question_blocks:
69
+ question_block.visible = False
70
+ question_block.value = ''
71
  submit_button.visible = False
72
  back_button.visible = False
73
  result_output.visible = False
 
75
  select_button.visible = True
76
  return "", "", "" # Сбросить все выходные данные
77
 
78
+ select_button.click(fn=show_questions, inputs=[test_selector], outputs=[test_selector])
79
+ submit_button.click(fn=check, inputs=question_blocks + [test_selector], outputs=[result_output])
80
  back_button.click(fn=go_back, inputs=[], outputs=[result_output, test_selector, select_button])
81
 
82
  demo.launch()