diff --git a/Typing-Test b/Typing-Test new file mode 160000 index 0000000..8463ec6 --- /dev/null +++ b/Typing-Test @@ -0,0 +1 @@ +Subproject commit 8463ec60d837ef175dcdeaa12a7c084c7d776e4a diff --git a/typing_speed_test.py b/typing_speed_test.py index bccbae5..d7533cd 100644 --- a/typing_speed_test.py +++ b/typing_speed_test.py @@ -1,6 +1,7 @@ import customtkinter as ctk import random import time +import winsound ctk.set_appearance_mode("light") ctk.set_default_color_theme("blue") @@ -47,7 +48,7 @@ def __init__(self): ) self.timer_label.pack() - # SENTENCE FRAME (for better visibility) + # SENTENCE FRAME self.sentence_frame = ctk.CTkFrame(self, width=620, height=100) self.sentence_frame.pack(pady=20) self.sentence_frame.pack_propagate(False) @@ -72,6 +73,9 @@ def __init__(self): self.input_textbox.pack(pady=10) self.input_textbox.configure(state="disabled") + # bind key press for sound + self.input_textbox.bind("", self.play_typing_sound) + # RESULT self.result_label = ctk.CTkLabel( self, @@ -210,6 +214,30 @@ def toggle_pause(self): self.pause_button.configure(text="Pause") self.update_timer() + # ====================== + # PLAY TYPING SOUND + # ====================== + def play_typing_sound(self, event): + + if not self.timer_running: + return + + typed = self.input_textbox.get("1.0", "end-1c") + index = len(typed) + + if event.keysym == "BackSpace": + winsound.Beep(500, 40) + return + + if index < len(self.current_sentence): + + expected_char = self.current_sentence[index] + + if event.char == expected_char: + winsound.Beep(800, 30) # correct key + else: + winsound.Beep(300, 80) # wrong key + # ====================== # RESULT # ====================== @@ -220,6 +248,8 @@ def check_result(self): self.timer_running = False + winsound.Beep(1200, 300) # completion sound + typed_text = self.input_textbox.get("1.0", "end-1c") elapsed_time = time.time() - self.start_time