İndirme hızı hesaplayıcısı projesi nasıl olmuş?

Yigit_4444

Centipat
Katılım
14 Kasım 2024
Mesajlar
404
Makaleler
1
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Merhaba arkadaşlar, bugün size yaptığım python projesinden bahsediceğim. Yaptığım bu projede indirme hızı hesaplayıcısı yaptım ayarlar kısmında kilobit ve megabit ayarlanabiliyosunuz ve dil ayarlama da var puanlarsanız projemi sevinirim. Exe çevirir.


İndirme linki: indirme_hesaplayıcısı






Python:
import tkinter as tk

# ---- Varsayılan Ayarlar ----
language = "tr"
speed_unit = "Mbps"
size_unit = "GB"

texts = {
    "tr": {
        "title": "İndirme Hesaplayıcı",
        "speed": "İnternet Hızı",
        "size": "Dosya Boyutu",
        "calculate": "Hesapla",
        "result": "İndirme Süresi",
        "settings": "Ayarlar",
        "error": "Geçerli değer gir",
        "language": "Dil",
        "speed_unit": "Hız Birimi",
        "size_unit": "Dosya Birimi",
        "ok": "Tamam",
        "min": "dk",
        "sec": "sn"
    },
    "en": {
        "title": "Download Calculator",
        "speed": "Internet Speed",
        "size": "File Size",
        "calculate": "Calculate",
        "result": "Download Time",
        "settings": "Settings",
        "error": "Enter valid values",
        "language": "Language",
        "speed_unit": "Speed Unit",
        "size_unit": "File Unit",
        "ok": "OK",
        "min": "min",
        "sec": "sec"
    }
}

def hesapla():
    try:
        speed = float(speed_entry.get())
        size = float(size_entry.get())

        if speed <= 0 or size <= 0:
            raise ValueError

        speed_mbps = speed if speed_unit == "Mbps" else speed / 1024
        size_gb = size if size_unit == "GB" else size / 1024

        total_seconds = (size_gb * 8 * 1024) / speed_mbps
        minutes = int(total_seconds // 60)
        seconds = int(total_seconds % 60)

        result_label.config(
            text=f"{texts[language]['result']}\n"
                 f"{minutes} {texts[language]['min']} "
                 f"{seconds} {texts[language]['sec']}"
        )

    except:
        result_label.config(text=texts[language]["error"])

def open_settings():
    settings = tk.Toplevel(root)
    settings.title(texts[language]["settings"])
    settings.geometry("230x230")
    settings.resizable(False, False)

    def apply():
        global language, speed_unit, size_unit
        language = lang_var.get()
        speed_unit = speed_var.get()
        size_unit = size_var.get()
        update_texts()
        settings.destroy()

    lang_var = tk.StringVar(value=language)
    speed_var = tk.StringVar(value=speed_unit)
    size_var = tk.StringVar(value=size_unit)

    tk.Label(settings, text=texts[language]["language"]).pack(pady=5)
    tk.OptionMenu(settings, lang_var, "tr", "en").pack()

    tk.Label(settings, text=texts[language]["speed_unit"]).pack(pady=5)
    tk.OptionMenu(settings, speed_var, "Mbps", "Kbps").pack()

    tk.Label(settings, text=texts[language]["size_unit"]).pack(pady=5)
    tk.OptionMenu(settings, size_var, "GB", "MB").pack()

    tk.Button(settings, text=texts[language]["ok"], command=apply).pack(pady=10)

def update_texts():
    title_label.config(text=texts[language]["title"])
    speed_label.config(text=texts[language]["speed"])
    size_label.config(text=texts[language]["size"])
    calc_button.config(text=texts[language]["calculate"])

# ---- Ana Pencere ----
root = tk.Tk()
root.geometry("360x260")
root.resizable(False, False)

top = tk.Frame(root)
top.pack(fill="x")

title_label = tk.Label(top, text=texts[language]["title"], font=("Arial", 14, "bold"))
title_label.pack(side="left", padx=10, pady=5)

settings_btn = tk.Button(
    top, text="⚙", command=open_settings, bd=0, font=("Arial", 14)
)
settings_btn.pack(side="right", padx=10)

content = tk.Frame(root)
content.pack(expand=True)

speed_label = tk.Label(content, text=texts[language]["speed"])
speed_label.pack()
speed_entry = tk.Entry(content)
speed_entry.pack()

size_label = tk.Label(content, text=texts[language]["size"])
size_label.pack(pady=(10, 0))
size_entry = tk.Entry(content)
size_entry.pack()

calc_button = tk.Button(
    content, text=texts[language]["calculate"], command=hesapla
)
calc_button.pack(pady=15)

result_label = tk.Label(content, font=("Arial", 11, "bold"))
result_label.pack()

root.mainloop()
 
C++ versiyonu ne zaman gelir? 10/7
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı