Bugün sizlerle birlikte Tkinter kullanarak Windows sistemler için kullanışlı, estetik ve basit bir widget oluşturacağız. Bu rehber, sizlere Tkinter’da stil oluşturma, locale ayarları ile çalışarak Türkçe karakter desteği sağlama, dinamik saat ve tarih güncellemeleri ekleme gibi önemli deneyimler kazandıracak. Kodları adım adım açıklayarak, sizlerin de kolayca uygulayabileceği bir rehber hazırladım. Haydi başlayalım!

1. Gerekli Modüller

Öncelikle main.py dosyamızı oluşturup, projemizde kullanacağımız modülleri içe aktaralım:

import tkinter as tk
from tkinter import ttk
from datetime import datetime
import locale
import platform

2. Widget Elementlerini Oluşturma

Gün, tarih ve saat elementlerini oluşturmak ve oluşturduğumuz elementlerin stil düzenlemelerini yapmak için Tkinter’ın ttk.Style sınıfını kullanacağız. Her element için ayrı ayrı stiller tanımlayalım:

def elementleri_olustur():
    style = ttk.Style()

    # Gün için soluk bir beyaz renk kullandım. Font: Comic Sans MS
    # Dilediğiniz stili aşağıdaki ilgili kısımlardan ayarlayabilirsiniz.

    day_color = "#b2b2b2"
    style.configure("NeonDay.TLabel",
                    foreground=day_color,
                    background="black",
                    font=("Comic Sans MS", 40, "bold"))

    date_color = "#768476"
    style.configure("NeonDate.TLabel",
                    foreground=date_color,
                    background="black",
                    font=("Comic Sans MS", 13))

    time_color = "#0bcf0e"
    style.configure("NeonTime.TLabel",
                    foreground=time_color,
                    background="black",
                    font=("Comic Sans MS", 13))

3. Locale Ayarları

Türkçe gün ve tarih bilgilerini doğru şekilde gösterebilmek için sistemin locale ayarlarını Türkçe yapıyoruz:

if platform.system() == "Windows":
    locale.setlocale(locale.LC_TIME, 'Turkish_Turkey.1254')
else:
    locale.setlocale(locale.LC_TIME, 'tr_TR.UTF-8')

4. Türkçe Karakter Dönüşümü

Türkçe karakterlerin doğru bir şekilde büyük harfe çevrilmesi için yardımcı bir fonksiyon tanımlıyoruz:

def to_upper_tr(text):
    char_map = {'i': 'İ', 'ş': 'Ş', 'ğ': 'Ğ',
                'ü': 'Ü', 'ö': 'Ö', 'ç': 'Ç', 'ı': 'I'}
    return ' '.join(char_map.get(c, c.upper()) for c in text)

5. Ana Pencereyi Oluşturma

Ana pencereyi oluşturup, arka planı şeffaf hale getiriyoruz:

root = tk.Tk()
root.title("Leidenfrost Widget")
root.overrideredirect(True)  # Pencere çerçevesini kaldırdık
root.geometry("600x300+457+540")  # Pencere boyutunu ve konumunu ayarladık
root.configure(bg='black')
root.wm_attributes("-transparentcolor", "black")  # Siyah arka planı şeffaf hale getirdik

6. Oluşturulan Elementleri Tanımlama ve Güncelleme

Gün, tarih ve saat bilgilerini tanımlayıp, her saniyede bir güncelliyoruz:

elementleri_olustur()

def update_time():
    today_day = to_upper_tr(datetime.today().strftime('%A'))
    today_date = datetime.today().strftime('%d %B %Y')
    current_time = datetime.today().strftime('%H:%M:%S')
    day_label.config(text=today_day)
    date_label.config(text=today_date)
    time_label.config(text=current_time)
    root.after(1000, update_time)  # Her saniyede bir saati güncelliyoruz.

# Gün ismini gösteren labeli oluşturalım.
day_label = ttk.Label(root, text="", style="NeonDay.TLabel")
day_label.place(relx=0.5, rely=0.3, anchor='center')

# Tarihi gösteren labeli oluşturalım.
date_label = ttk.Label(root, text="", style="NeonDate.TLabel")
date_label.place(relx=0.5, rely=0.5, anchor='center')

# Saati gösteren labeli oluşturalım.
time_label = ttk.Label(root, text="", style="NeonTime.TLabel")
time_label.place(relx=0.5, rely=0.58, anchor='center')

update_time()

7. Pencereyi Fare ile Taşınabilir Hale Getirme

Pencereyi fare ile taşınabilir hale getirmek için gerekli işlevleri tanımlıyoruz:

def on_click(event):
    root._drag_data = {'x': event.x, 'y': event.y}

def on_drag(event):
    x = root.winfo_x() + event.x - root._drag_data['x']
    y = root.winfo_y() + event.y - root._drag_data['y']
    root.geometry(f"+{x}+{y}")

for widget in (day_label, date_label, time_label):
    widget.bind("<Button-1>", on_click)
    widget.bind("<B1-Motion>", on_drag)

8. Uygulamayı Başlatma

Son olarak, uygulamamızı çalıştırıyoruz:

root.mainloop()

9. Uygulamayı EXE’ye Çevirme

Widget’i her sistemde çalışabilecek şekilde bir EXE dosyasına dönüştürmek için PyInstaller kullanacağız. Öncelikle, CMD üzerinden PyInstaller’ı yükleyelim:

pip install pyinstaller

Ardından, CMD üzerinden projemizin bulunduğu dizine gelip aşağıdaki komut ile Python scriptimizi EXE haline getirelim:

pyinstaller --onefile --noconsole main.py

Bu komut, scriptimizi dist klasöründe bir EXE dosyası olarak oluşturacaktır.

10. Widget’i Sistem Başlangıcında Çalıştırma

Oluşturduğumuz EXE’nin kısayolunu başlangıç klasörüne eklemek için:

Windows tuşu + R ile çalıştırı açın → shell:startup yazıp tamama tıklayarak Başlangıç klasörüne girin. Kısayolu bu klasöre atın. Artık sistem başlangıcında widget’ımız otomatik olarak açılacaktır.

Sonuç

Widget ekran görüntüsü

İndirilebilir dosyalar:

Umarım bu rehber, kendi widget projelerinizi oluşturmak adına size faydalı olmuştur.