Merhabalar THT ailesi geliştirdiğim bu programın amacı ingilizce kelime çalışıren öğrenmeyi daha etkin ve eğlenceli bir hale getirmek bu yüzden elimden geldiğince bir proje yapmaya çalıştım. Program şöyle çalışıyor ingilizce : türkçe kelimeleri(arada ikin nokta olması önemli) kelime ekle butonuna basıp istediğniz kelimeleri parantez içerisinde yazdığım formatta ekliyorsunuz bu kısmı yapay zekadan halledebilirsiniz. Daha sonra baştan başla butonuna basarak entegre ettiğniniz bu kelimeleri program seslendirerek kelimenin telafuzunuda öğrenmenizi sağlıyor kelimeyi hatırlayamıyorsanız ipucu butonuna basarak kelime hakkında ufak bilgi alabilirsiniz yanlış bildiğiniz kelimeler istatistikler butonuna basarak görebilrisiniz daha sonradan onların üzerine çalışabilirsiniz. Programı çalıştırıken aktivasyon şifresi kısmı geliyor onlarda zaten kodda mevcut isterseniz o kısmılarıda kaldırıp kendinize göre düzenleyebilrisiniz herkese şimdiden iyi çalışmalar.
Python:
import tkinter as tk
import random
from tkinter import font as tkfont
from tkinter import simpledialog, messagebox
import pyttsx3
import time
class VocabularyTrainer:
def __init__(self, root):
self.root = root
self.root.title("İngilizce Kelime Antrenmanı")
self.root.geometry("600x650")
self.root.configure(bg='#1e1e1e') # Arka plan rengini koyu griye değiştirdim
# Şifreler
self.valid_passwords = ["alpha123", "beta456", "gamma789", "delta012", "epsilon345"]
self.max_attempts = 3
self.attempts_left = self.max_attempts
# Şifre penceresi
self.password_window = tk.Toplevel(root)
self.password_window.title("Şifre Gerekiyor")
self.password_window.geometry("300x150")
self.password_window.configure(bg='#1e1e1e')
# Şifre penceresi içeriği
self.password_label = tk.Label(self.password_window, text="Aktivasyon Şifresi:", font=tkfont.Font(family="Segoe UI", size=12), bg='#1e1e1e', fg='#ecf0f1')
self.password_label.pack(pady=10)
self.password_entry = tk.Entry(self.password_window, font=tkfont.Font(family="Segoe UI", size=12), show='*')
self.password_entry.pack(pady=10)
self.password_entry.bind("<Return>", self.check_password)
self.password_message = tk.Label(self.password_window, text="", font=tkfont.Font(family="Segoe UI", size=10), bg='#1e1e1e', fg='#e74c3c')
self.password_message.pack(pady=10)
self.password_window.focus()
def check_password(self, event):
entered_password = self.password_entry.get().strip()
if entered_password in self.valid_passwords:
self.password_window.destroy()
self.init_ui()
else:
self.attempts_left -= 1
if self.attempts_left > 0:
self.password_message.config(text=f"Yanlış şifre! Kalan deneme hakkı: {self.attempts_left}", fg='#e74c3c')
self.password_entry.delete(0, tk.END)
else:
self.password_message.config(text="Şifre deneme hakkınız bitti.", fg='#e74c3c')
self.root.quit() # Uygulamayı kapat
def init_ui(self):
# Yazı tipleri
self.custom_font = tkfont.Font(family="Segoe UI", size=14)
self.heading_font = tkfont.Font(family="Segoe UI", size=18, weight="bold")
self.button_font = tkfont.Font(family="Segoe UI", size=12, weight="bold")
# Başlangıç kelime sözlüğü
self.vocab_dict = {
"abundant": "bol",
"experience": "deneyim", # Örnek kelimeler
# Diğer kelimeler buraya eklenebilir
}
self.words = list(self.vocab_dict.keys())
self.word_attempts = {word: 0 for word in self.words}
self.correct_attempts = {word: 0 for word in self.words}
self.score = 0
self.total_questions = 0
self.start_time = time.time() # Başlangıç zamanını kaydet
# Üst çerçeve
self.top_frame = tk.Frame(self.root, bg='#2c3e50', pady=10)
self.top_frame.pack(fill=tk.X)
# Skor etiketi
self.score_label = tk.Label(self.top_frame, text="Skor: 0 / 0", font=self.custom_font, bg='#2c3e50', fg='#ecf0f1')
self.score_label.pack()
# Orta çerçeve
self.middle_frame = tk.Frame(self.root, bg='#ecf0f1', pady=20)
self.middle_frame.pack(fill=tk.BOTH, expand=True)
# Kelime kutusu
self.word_box = tk.Frame(self.middle_frame, bg='#ffffff', bd=2, relief='groove')
self.word_box.pack(pady=20, padx=20, fill=tk.BOTH, expand=True)
self.word_label = tk.Label(self.word_box, text="", font=self.heading_font, bg='#ffffff', fg='#2c3e50', padx=20, pady=20)
self.word_label.pack()
# Cevap giriş kutusu
self.answer_box = tk.Frame(self.middle_frame, bg='#f8f9fa', bd=2, relief='groove')
self.answer_box.pack(pady=10, padx=20, fill=tk.X)
self.answer_entry = tk.Entry(self.answer_box, font=self.custom_font, justify='center', bd=0, relief='flat')
self.answer_entry.pack(pady=10, padx=10, fill=tk.X)
self.answer_entry.bind("<Return>", self.check_answer)
# Sonuç etiketi
self.result_label = tk.Label(self.middle_frame, text="", font=self.custom_font, bg='#ecf0f1')
self.result_label.pack(pady=10)
self.correct_answer_label = tk.Label(self.middle_frame, text="", font=self.custom_font, bg='#ecf0f1')
self.correct_answer_label.pack(pady=10)
# Alt çerçeve
self.bottom_frame = tk.Frame(self.root, bg='#2c3e50', pady=10)
self.bottom_frame.pack(fill=tk.X)
# Butonlar
self.add_word_button = tk.Button(self.bottom_frame, text="Kelime Listesi Ekle", font=self.button_font, command=self.add_words, bg='#27ae60', fg='#ecf0f1', relief='raised', padx=10, pady=5)
self.add_word_button.pack(side=tk.LEFT, padx=10)
self.hint_button = tk.Button(self.bottom_frame, text="İpucu", font=self.button_font, command=self.show_hint, bg='#27ae60', fg='#ecf0f1', relief='raised', padx=10, pady=5)
self.hint_button.pack(side=tk.LEFT, padx=10)
self.stats_button = tk.Button(self.bottom_frame, text="İstatistikler", font=self.button_font, command=self.show_stats, bg='#3498db', fg='#ecf0f1', relief='raised', padx=10, pady=5)
self.stats_button.pack(side=tk.LEFT, padx=10)
self.restart_button = tk.Button(self.bottom_frame, text="Baştan Başla", font=self.button_font, command=self.restart, bg='#e74c3c', fg='#ecf0f1', relief='raised', padx=10, pady=5)
self.restart_button.pack(side=tk.RIGHT, padx=10)
# Kronometre etiketi
self.timer_label = tk.Label(self.bottom_frame, text="Geçen Süre: 0:00", font=self.custom_font, bg='#2c3e50', fg='#ecf0f1')
self.timer_label.pack(side=tk.LEFT, padx=10)
# Ses motorunu başlat
self.engine = pyttsx3.init()
self.used_words = set()
self.incorrect_words = set()
self.motivation_quotes = [
"Harika gidiyorsun!",
"Devam et, başarı yakın!",
"İyi iş çıkardın!",
"Mükemmel! Daha iyisini yapabilirsin!",
"Çok iyi! Devam et!",
"Muhteşem!",
"Bravo!",
"Daha iyisini yapamazdın!",
"Böyle devam et!",
"Aferin!",
"Hedefe yaklaştın!",
"Süper!",
"Müthiş bir ilerleme!",
"Çok zekice!",
"Seninle gurur duyuyorum!",
"Her geçen gün daha iyisin!"
]
self.next_word()
self.update_timer() # Kronometreyi başlat
def update_timer(self):
elapsed_time = time.time() - self.start_time
minutes = int(elapsed_time // 60)
seconds = int(elapsed_time % 60)
self.timer_label.config(text=f"Geçen Süre: {minutes}:{seconds:02d}")
self.root.after(1000, self.update_timer) # Her saniye güncelle
def next_word(self):
self.answer_entry.delete(0, tk.END)
self.result_label.config(text="")
self.correct_answer_label.config(text="")
if len(self.used_words) == len(self.words):
self.word_label.config(text="Tüm kelimeler soruldu!")
self.answer_entry.config(state=tk.DISABLED)
return
available_words = [word for word in self.words if word not in self.used_words]
self.current_word = random.choice(available_words)
self.word_label.config(text=self.current_word)
self.used_words.add(self.current_word)
# Kelimenin İngilizce okunuşunu çalma
self.play_sound(self.current_word)
def check_answer(self, event):
user_answer = self.answer_entry.get().strip().lower()
self.total_questions += 1
self.word_attempts[self.current_word] += 1
correct_answer = self.vocab_dict[self.current_word]
if user_answer == correct_answer:
self.result_label.config(text="Doğru✅", fg="green")
self.score += 1
if random.random() < 0.3: # %30 ihtimalle motivasyon sözü göster
self.correct_answer_label.config(text=random.choice(self.motivation_quotes), fg="blue")
else:
self.result_label.config(text="Yanlış❌", fg="red")
self.correct_answer_label.config(text=f"Doğru cevap: {correct_answer}", fg="blue")
self.incorrect_words.add(self.current_word) # Yanlış cevap verildiğinde yanlış bilinenler listesine ekle
self.score_label.config(text=f"Skor: {self.score} / {self.total_questions}")
self.root.after(2000, self.next_word)
def play_sound(self, word):
text = word # İngilizce kelimeyi okuma
self.engine.say(text)
self.engine.runAndWait()
def show_hint(self):
# Kelimenin Türkçe karşılığının bir kısmını ve yıldızlarla gizlenmiş kısmını gösterir
if hasattr(self, 'current_word'):
correct_answer = self.vocab_dict[self.current_word]
hint_length = max(1, len(correct_answer) // 2) # İpucunda en az 1 harf görünsün
hint = correct_answer[:hint_length] + '*' * (len(correct_answer) - hint_length)
self.word_label.config(text=hint)
else:
messagebox.showinfo("İpucu", "Şu anda bir kelime üzerinde çalışılmıyor.")
def add_words(self):
# Toplu kelime ekleme penceresi
words_input = simpledialog.askstring("Kelime Listesi Ekle", "Kelime ve Türkçe karşılıklarını (örn: apple:elma\nbanana:muz):")
if words_input:
new_entries = words_input.strip().split('\n')
added_words = []
for entry in new_entries:
try:
word, translation = entry.split(':')
word = word.strip().lower()
translation = translation.strip().lower()
if word in self.vocab_dict:
messagebox.showinfo("Bilgi", f"'{word}' kelimesi zaten mevcut.")
else:
self.vocab_dict[word] = translation
self.words.append(word)
self.word_attempts[word] = 0
self.correct_attempts[word] = 0
added_words.append(word)
except ValueError:
messagebox.showerror("Hata", "Girdiğiniz format geçerli değil. Lütfen 'kelime:çeviri' formatını kullanın.")
if added_words:
messagebox.showinfo("Bilgi", f"Yeni kelimeler eklendi: {', '.join(added_words)}")
def show_stats(self):
if not self.incorrect_words:
messagebox.showinfo("İstatistikler", "Yanlış bildiğiniz kelime yok.")
else:
incorrect_words_str = "\n".join(f"{word}: {self.vocab_dict[word]}" for word in self.incorrect_words)
messagebox.showinfo("Yanlış Bilinen Kelimeler", incorrect_words_str)
def restart(self):
# Başlangıç durumuna döner
self.used_words.clear()
self.incorrect_words.clear()
self.score = 0
self.total_questions = 0
self.word_attempts = {word: 0 for word in self.words}
self.correct_attempts = {word: 0 for word in self.words}
self.start_time = time.time()
self.score_label.config(text="Skor: 0 / 0")
self.answer_entry.config(state=tk.NORMAL)
self.next_word()
self.update_timer()
# Uygulama başlatma
root = tk.Tk()
app = VocabularyTrainer(root)
root.mainloop()



