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ı
İ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()