Sobre este proyecto
it-programming / web-development
Abierto
Contexto general del proyecto
Import tkinter as tk from tkinter import messagebox class QuizApp: def __init__(self, root): self.root = root root.title("Hamilton Colombia - Ruta de lenguaje") root.state('zoomed') self.setup_grades() self.current_grade = 3 self.current_exam = 1 self.exam_results = {grade: [None] * 4 for grade in self.grades} self.grade_buttons = {} self.create_widgets() def setup_grades(self): self.grades = {f"{grade}°": [['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D', 'D'] for _ in range(4)] for grade in range(3, 12)} def create_widgets(self): total_grades = len(self.grades) min_height = 2 max_height = 6 # Ajusta este valor según tus necesidades for i, grade in enumerate(sorted(self.grades, key=lambda g: int(g[:-1]))): # Calcular la altura del botón de manera proporcional height_factor = min_height + (max_height - min_height) * i / (total_grades - 1) button = tk.Button(self.root, text=grade, bg="dark blue", fg="white", font=("Helvetica", 12), command=lambda g=grade: self.open_exam_window(g)) button.grid(row=0, column=i, sticky="nsew", padx=5, pady=5) self.root.grid_columnconfigure(i, weight=1) button.config(height=int(height_factor)) self.grade_buttons[grade] = button self.footer_label = tk.Label(self.root, text="Desarrollado por el laboratorio de software de Hamilton Colombia www.hamiltoncolombia.com", font=("Helvetica", 10)) self.footer_label.grid(row=1, column=0, columnspan=total_grades, sticky="sew") self.root.grid_rowconfigure(1, weight=1) def open_exam_window(self, grade): if int(grade[:-1]) > self.current_grade: messagebox.showinfo("Información", f"No puedes acceder a este grado aún.") Return exam_window = tk.Toplevel(self.root) exam_window.title(f"{grade} - Examen {self.current_exam}") exam_window.state('zoomed') self.create_exam_widgets(exam_window, self.grades[grade][self.current_exam - 1], grade) def create_exam_widgets(self, window, answers, grade): self.option_vars = [tk.StringVar(value="N/A") for _ in range(20)] for i in range(20): frame = tk.Frame(window) label = tk.Label(frame, text=f"Pregunta {i+1}:", font=("Helvetica", 12)) label.pack(side=tk.LEFT) for option in ['A', 'B', 'C', 'D']: button = tk.Radiobutton(frame, text=option, variable=self.option_vars[i], value=option, font=("Helvetica", 12)) button.pack(side=tk.LEFT) frame.pack() submit_button = tk.Button(window, text="Enviar Respuestas", font=("Helvetica", 12), command=lambda: self.evaluate_answers(window, answers, grade)) submit_button.pack() def evaluate_answers(self, window, correct_answers, grade): if any(var.get() == "N/A" for var in self.option_vars): window.iconify() messagebox.showwarning("Respuestas incompletas", "Por favor, responde a todas las preguntas antes de enviar.") Window.deiconify() return user_answers = [var.get() for var in self.option_vars] score = sum(user_answer == correct_answer for user_answer, correct_answer in zip(user_answers, correct_answers)) self.show_result(window, score, grade) def show_result(self, window, score, grade): result_message = f"{score}/20" if score >= 17: messagebox.showinfo("Resultado", f"Felicidades pasaste al siguiente nivel. Respuestas correctas: {result_message}") self.current_grade += 1 self.current_exam = 1 self.grade_buttons[f"{self.current_grade - 1}°"].config(bg="yellow", fg="black") else: messagebox.showinfo("Resultado", f"Lo siento debes presentar otro examen del mismo nivel. Respuestas correctas: {result_message}") self.current_exam = (self.current_exam % 4) + 1 window.destroy() if __name__ == "__main__": root = tk.Tk() app = QuizApp(root) root.mainloop()
Categoría Programación y Tecnología
Subcategoría Programación Web
¿Cuál es el alcance del proyecto? Bug o cambio pequeño
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo las especificaciones
Disponibilidad requerida Según se necesite
Roles necesarios Programador
Plazo de Entrega: 03 Febrero, 2024
Habilidades necesarias