Best ABC Learner for kids (Python Script)
This is the best ABC Learner (Python Script) it Includes Learning, Test, Matching etc.
Script:
import tkinter as tk
from tkinter import messagebox
import random
import winsound # For sound playback
# Alphabet list
alphabet = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
# Function to return to the main menu
def return_to_main_menu(window):
window.destroy()
root.deiconify()
# Function for ABC Learner
def start_abc_learner():
root.withdraw()
learner_window = tk.Toplevel(root)
learner_window.title("ABC Learner")
learner_window.geometry("800x600")
learner_window.configure(bg="#FFCCCC")
def play_sound(letter):
try:
winsound.PlaySound(f"sounds/{letter}.wav", winsound.SND_FILENAME | winsound.SND_ASYNC)
except Exception as e:
print(f"Sound error for '{letter}': {e}")
def show_next_letter():
global current_index
if current_index < len(alphabet):
label_var.set(alphabet[current_index])
current_color = random.choice(["#FFCCCC", "#FFCC99", "#FFFF99", "#CCFFCC", "#CCCCFF", "#FFCCFF"])
learner_window.config(bg=current_color)
play_sound(alphabet[current_index])
else:
messagebox.showinfo("Congratulations!", "You've completed the ABCs!")
return_to_main_menu(learner_window)
def check_letter(event):
global current_index
pressed_key = event.char.upper()
if pressed_key == alphabet[current_index]:
current_index += 1
show_next_letter()
else:
messagebox.showwarning("Try Again!", f"Press '{alphabet[current_index]}' to continue.")
learner_window.bind('<Escape>', lambda event: return_to_main_menu(learner_window))
global current_index
current_index = 0
label_var = tk.StringVar()
label_var.set(alphabet[0])
letter_label = tk.Label(learner_window, textvariable=label_var, font=("Arial", 200, "bold"), bg="#FFCCCC", fg="#333333")
letter_label.pack(pady=50)
instruction_label = tk.Label(learner_window, text="Press the matching key on your keyboard!", font=("Arial", 20), bg="#FFCCCC", fg="#333333")
instruction_label.pack(pady=20)
main_menu_button = tk.Button(learner_window, text="Main Menu", font=("Arial", 16), bg="#4CAF50", fg="white", command=lambda: return_to_main_menu(learner_window), padx=10, pady=10)
main_menu_button.pack(pady=20)
learner_window.bind('<KeyPress>', check_letter)
show_next_letter()
# Function for ABC Test
def start_abc_test():
root.withdraw()
test_window = tk.Toplevel(root)
test_window.title("ABC Test")
test_window.geometry("800x600")
test_window.configure(bg="#FBE7C6")
def next_letter():
global current_letter
current_letter = random.choice(alphabet)
letter_var.set(current_letter)
start_timer()
def start_timer():
global time_left, timer
time_left = 10
timer_label_var.set(f"Time Left: {time_left} seconds")
timer = test_window.after(1000, countdown)
def countdown():
global time_left, timer
if time_left > 0:
time_left -= 1
timer_label_var.set(f"Time Left: {time_left} seconds")
timer = test_window.after(1000, countdown)
else:
messagebox.showinfo("Test Over", "You Failed!")
return_to_main_menu(test_window)
def check_input(event):
global timer
user_input = event.char.upper()
if user_input == current_letter:
test_window.after_cancel(timer) # Stop the timer if correct input
next_letter() # Move to the next letter
else:
messagebox.showwarning("Incorrect!", "Try again!")
# Bind the <KeyPress> event
test_window.bind('<KeyPress>', check_input)
# Set focus on the test window
test_window.focus_force()
global current_letter, time_left
time_left = 10
letter_var = tk.StringVar()
letter_var.set("")
letter_label = tk.Label(test_window, textvariable=letter_var, font=("Arial", 150, "bold"), bg="#FBE7C6", fg="#333333")
letter_label.pack(pady=50)
timer_label_var = tk.StringVar()
timer_label_var.set(f"Time Left: {time_left} seconds")
timer_label = tk.Label(test_window, textvariable=timer_label_var, font=("Arial", 24), bg="#FBE7C6", fg="#333333")
timer_label.pack(pady=20)
instructions_label = tk.Label(test_window, text="Press the key corresponding to the letter shown!", font=("Arial", 16), bg="#FBE7C6", fg="#333333")
instructions_label.pack(pady=10)
main_menu_button = tk.Button(test_window, text="Main Menu", font=("Arial", 16), bg="#4CAF50", fg="white", command=lambda: return_to_main_menu(test_window), padx=10, pady=10)
main_menu_button.pack(pady=20)
next_letter()
# Function for ABC Matching
def start_abc_matching():
root.withdraw()
matching_window = tk.Toplevel(root)
matching_window.title("ABC Matching")
matching_window.geometry("800x600")
matching_window.configure(bg="#E6E6FA")
def play_sound(letter):
try:
winsound.PlaySound(f"sounds/{letter}.wav", winsound.SND_FILENAME | winsound.SND_ASYNC)
except Exception as e:
print(f"Sound error for '{letter}': {e}")
def show_new_letters():
global target_letter, letter_buttons
target_letter = random.choice(alphabet)
play_sound(target_letter)
for button in letter_buttons:
button.destroy()
letter_buttons.clear()
displayed_letters = random.sample(alphabet, 6)
if target_letter not in displayed_letters:
displayed_letters[random.randint(0, 5)] = target_letter
for letter in displayed_letters:
button = tk.Button(
matching_window, text=letter, font=("Arial", 40), bg="#4CAF50", fg="white",
command=lambda l=letter: check_letter(l)
)
button.pack(pady=10, padx=10, side="left", expand=True)
letter_buttons.append(button)
def check_letter(selected_letter):
if selected_letter == target_letter:
messagebox.showinfo("Correct!", "You got it! Well done!")
show_new_letters()
else:
messagebox.showwarning("Incorrect!", f"The correct letter was '{target_letter}'!")
show_new_letters()
matching_window.bind('<Escape>', lambda event: return_to_main_menu(matching_window))
global letter_buttons
letter_buttons = []
target_letter = None
instructions_label = tk.Label(matching_window, text="Listen to the sound and click the matching letter!", font=("Arial", 20), bg="#E6E6FA", fg="#333333")
instructions_label.pack(pady=20)
main_menu_button = tk.Button(
matching_window, text="Main Menu", font=("Arial", 16), bg="#FFC300", fg="white",
command=lambda: return_to_main_menu(matching_window), padx=10, pady=10
)
main_menu_button.pack(pady=20)
show_new_letters()
# Main Menu Layout
root = tk.Tk()
root.title("ABC Learning App")
root.geometry("800x600")
root.configure(bg="#f0f0f0")
title_label = tk.Label(root, text="Welcome to ABC Learning App", font=("Helvetica", 24, "bold"), bg="#f0f0f0", fg="#333333")
title_label.pack(pady=30)
abc_learner_button = tk.Button(root, text="ABC Learner", font=("Arial", 16), bg="#4CAF50", fg="white", command=start_abc_learner, padx=10, pady=10)
abc_learner_button.pack(pady=20)
abc_test_button = tk.Button(root, text="ABC Test", font=("Arial", 16), bg="#FF5733", fg="white", command=start_abc_test, padx=10, pady=10)
abc_test_button.pack(pady=20)
abc_matching_button = tk.Button(root, text="ABC Matching", font=("Arial", 16), bg="#FFC300", fg="white", command=start_abc_matching, padx=10, pady=10)
abc_matching_button.pack(pady=20)
root.mainloop()
Comments
Post a Comment