import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageTk, ImageFilter
from datetime import datetime
class LoginWindow(tk.Tk):
def __init__(self):
super().__init__()
self.title("ATM Otomasyonu")
self.geometry("1000x1200")
self.configure(bg="#F0F0F0")
# Arka plan resmi
bg_image = Image.open("C:/Users/abdan/OneDrive/Masaüstü/Atm/logo.png")
bg_image = bg_image.filter(ImageFilter.GaussianBlur(radius=10))
bg_image = bg_image.resize((self.winfo_screenwidth(), self.winfo_screenheight()), Image.ANTIALIAS)
self.bg_photo = ImageTk.PhotoImage(bg_image)
bg_label = tk.Label(self, image=self.bg_photo)
bg_label.place(x=0, y=0, relwidth=1, relheight=1)
# Tarih ve Saat
self.date_time_label = tk.Label(self, font=("Arial", 16, "bold"), bg="#F0F0F0")
self.date_time_label.place(relx=0.5, rely=0.05, anchor="center")
self.update_date_time()
# Giriş Alanları
self.entry_frame = tk.Frame(self, bg="#F0F0F0")
self.entry_frame.place(relx=0.5, rely=0.4, anchor="center")
self.tc_label = tk.Label(self.entry_frame, text="TC Kimlik Numarası:", font=("Arial", 14, "bold"), bg="#F0F0F0")
self.tc_label.grid(row=0, column=0, padx=10, pady=10, sticky="w")
self.tc_var = tk.StringVar()
self.tc_entry = tk.Entry(self.entry_frame, font=("Arial", 14), bd=2, relief="groove", textvariable=self.tc_var)
self.tc_entry.grid(row=1, column=0, padx=10, pady=10)
self.password_label = tk.Label(self.entry_frame, text="Şifre:", font=("Arial", 14, "bold"), bg="#F0F0F0")
self.password_label.grid(row=2, column=0, padx=10, pady=10, sticky="w")
self.password_entry = tk.Entry(self.entry_frame, font=("Arial", 14), bd=2, relief="groove", show="*")
self.password_entry.grid(row=3, column=0, padx=10, pady=10)
# Butonlar
self.button_frame = tk.Frame(self, bg="#F0F0F0")
self.button_frame.place(relx=0.5, rely=0.7, anchor="center")
self.login_button = tk.Button(self.button_frame, text="Giriş Yap", font=("Arial", 14), bd=2, relief="raised", bg="#4CAF50", fg="white", command=self.login, state="normal")
self.login_button.grid(row=0, column=0, padx=10, pady=10)
self.register_button = tk.Button(self.button_frame, text="Kayıt Ol", font=("Arial", 14), bd=2, relief="raised", bg="#2196F3", fg="white", command=self.RegisterButton)
self.register_button.grid(row=0, column=1, padx=10, pady=10)
self.forgot_password_button = tk.Button(self.button_frame, text="Şifremi Unuttum", font=("Arial", 14), bd=2, relief="raised", bg="#F44336", fg="white", command=self.ForgotPasswordButton)
self.forgot_password_button.grid(row=0, column=2, padx=10, pady=10)
# Deneme Hakkı ve Süre
self.attempt_label = tk.Label(self, font=("Arial", 14, "bold"), bg="#F0F0F0")
self.attempt_label.place(relx=0.2, rely=0.8, anchor="w")
self.countdown_label = tk.Label(self, font=("Arial", 14, "bold"), bg="#F0F0F0")
self.countdown_label.place(relx=0.8, rely=0.8, anchor="e")
self.login_attempts = 3
self.countdown_time = 180 # 3 dakika
self.update_attempt_label()
# Giriş alanlarını kontrol et
self.tc_var.trace_add("write", self.check_entries)
# Süreyi başlat
self.countdown_time_update()
def update_date_time(self):
current_datetime = datetime.now()
date_string = current_datetime.strftime("%d.%m.%Y")
time_string = current_datetime.strftime("%H:%M:%S")
date_time_text = f"{date_string} / {time_string}"
self.date_time_label.configure(text=date_time_text)
self.after(1000, self.update_date_time)
def update_attempt_label(self):
self.attempt_label.configure(text=f"Kalan Deneme Hakkı: {self.login_attempts}")
if self.login_attempts == 0:
self.login_button.configure(state="disabled")
def check_entries(self, *args):
tc_value = self.tc_var.get()
password_value = self.password_entry.get()
if len(password_value) > 6 or len(tc_value) > 11:
messagebox.showwarning("Uyarı", "TC Kimlik Numarası en fazla 11 karakter ve Şifre en fazla 6 karakter olmalıdır.")
self.reset_entries()
def login(self):
if not self.tc_var.get() or not self.password_entry.get():
messagebox.showerror("Hata", "Lütfen TC ve şifrenizi girin.")
return
username = self.tc_var.get()
password = self.password_entry.get()
# Örnek olarak, kullanıcı adı ve şifre "admin" olarak kabul edilsin
if username == "admin" and password == "admin":
messagebox.showinfo("Giriş Başarılı", "Giriş işlemi başarılı.")
self.reset_entries()
else:
self.login_attempts -= 1
self.reset_entries()
self.update_attempt_label()
if self.login_attempts == 0:
self.after_cancel(self.countdown_time_update)
self.reset_attempts()
self.login_button.configure(state="disabled")
self.tc_entry.configure(state="disabled")
self.password_entry.configure(state="disabled")
self.countdown_label.configure(text=f"Kalan Süre: {self.countdown_time} saniye")
else:
messagebox.showerror("Giriş Başarısız", f"Kalan deneme hakkınız: {self.login_attempts}. Lütfen TC veya şifrenizi kontrol edin.")
def countdown_time_update(self):
if self.countdown_time > 0:
self.countdown_time -= 1
self.countdown_label.configure(text=f"Kalan Süre: {self.countdown_time} saniye")
self.after(1000, self.countdown_time_update)
else:
self.login_button.configure(state="disabled")
def reset_attempts(self):
self.login_attempts = 0
self.update_attempt_label()
self.login_button.configure(state="normal")
self.tc_entry.configure(state="normal")
self.password_entry.configure(state="normal")
self.countdown_label.configure(text="")
self.countdown_time = 0
def reset_entries(self):
self.tc_var.set("")
self.password_entry.delete(0, tk.END)
def RegisterButton(self):
messagebox.showinfo("Kayıt Ol", "Kayıt Ol butonuna bastınız.")
def ForgotPasswordButton(self):
messagebox.showinfo("Şifremi Unuttum", "Şifremi Unuttum butonuna bastınız.")
if __name__ == "__main__":
login_window = LoginWindow()
login_window.mainloop()