| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- import tkinter as tk
- from tkinter import messagebox
- # Вопросы и варианты ответов
- questions = [
- {
- "question": "Какие основные требования предъявляются к обработке и хранению персональных данных?",
- "options": [
- "Сбор по согласию, законность, конфиденциальность, ограничение сроков, актуальность, меры защиты",
- "Только сбор без ограничений",
- "Обработка без согласия"
- ],
- "correct": 0 # индекс правильного варианта
- },
- {
- "question": "Назовите хотя бы три примера организаций, в которых используются персональные данные.",
- "options": [
- "Банки, школы, соцсети",
- "Автосервисы, киоски, такси",
- "Кинотеатры, спортзалы, кафе"
- ],
- "correct": 0
- },
- {
- "question": "Какие основные законы регулируют защиту персональных данных в России и ЕС?",
- "options": [
- "GDPR, ФЗ-152",
- "Закон о секретности",
- "Закон о конфиденциальности"
- ],
- "correct": 0
- },
- {
- "question": "Какие виды персональных данных выделяет федеральный закон №152-ФЗ?",
- "options": [
- "Общие, Особые, Биометрические",
- "Только общие",
- "Демографические и финансовые"
- ],
- "correct": 0
- }
- ]
- class QuizApp:
- def __init__(self, master):
- self.master = master
- master.title("Викторина по защите персональных данных")
- master.geometry('700x400')
- self.current_question = 0
- self.correct_answers = 0
- self.label = tk.Label(master, text=f"Вопрос {self.current_question+1} из {len(questions)}", font=("Arial", 14))
- self.label.pack(pady=10)
- self.question_label = tk.Label(master, text=questions[self.current_question]['question'], font=("Arial", 12))
- self.question_label.pack(pady=10)
- self.options_var = tk.IntVar()
- self.options_var.set(-1) # Изначально ничего не выбрано
- self.radio_buttons = []
- for idx, option in enumerate(questions[self.current_question]['options']):
- rb = tk.Radiobutton(master, text=option, variable=self.options_var, value=idx, font=("Arial", 12), wraplength=650, justify='left')
- rb.pack(anchor='w', padx=20, pady=5)
- self.radio_buttons.append(rb)
- self.next_button = tk.Button(master, text="Ответить и перейти к следующему вопросу", command=self.check_answer)
- self.next_button.pack(pady=20)
- def check_answer(self):
- selected = self.options_var.get()
- # Проверка, выбрал ли пользователь вариант
- if selected == -1:
- messagebox.showwarning("Внимание", "Пожалуйста, выберите ответ.")
- return
- correct_idx = questions[self.current_question]['correct']
- # Окрашивание в зеленый или красный
- if selected == correct_idx:
- self.correct_answers += 1
- self.master.config(bg='green')
- else:
- self.master.config(bg='red')
- # После небольшой задержки восстановим фон и перейдем к следующему вопрос
- self.master.after(1000, self.next_question)
- def next_question(self):
- # Сброс фона
- self.master.config(bg='SystemButtonFace')
- self.current_question += 1
- if self.current_question < len(questions):
- self.update_question()
- else:
- self.show_result()
- def update_question(self):
- self.label.config(text=f"Вопрос {self.current_question+1} из {len(questions)}")
- self.question_label.config(text=questions[self.current_question]['question'])
- self.options_var.set(-1)
- # Обновляем варианты ответов
- for idx, rb in enumerate(self.radio_buttons):
- rb.config(text=questions[self.current_question]['options'][idx], value=idx)
- def show_result(self):
- messagebox.showinfo("Результат", f"Вы правильно ответили на {self.correct_answers} из {len(questions)} вопросов!")
- self.master.quit()
- if __name__ == "__main__":
- root = tk.Tk()
- app = QuizApp(root)
- root.mainloop()
|