Python Dili İle Çapraz Platform Çalışabilen SpeedTest Uygulaması Yapımı
Önce Gerekli Kütüphaneleri Kuralım
Tkinter
$ sudo apt-get install python3-tk
Bashspeedtest-cli
$ pip install speedtest-cli
Bashmatplotlib
$ pip install matplotlib
BashPillow (PIL)
$ pip install pillow
Bashrequests
$ pip install requests
BashKodlamaya Başlayalım
PY Dosyamızı Oluşturalım
$ touch speed.py
BashPY dosyamıza kodları yazmak için düzenleyelim
$ nano speed.py
BashKodları Yazalım.
import tkinter as tk
import speedtest
import threading
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import webbrowser
from PIL import Image, ImageTk
import requests
# Bağlantı durumu etiketini güncelleme
def update_connection_status(status):
connection_status_label.config(text=f"Bağlantı Durumu: {status}")
# Hız testi fonksiyonu
def run_speed_test():
try:
# Bağlantı durumu güncelle
update_connection_status("Bağlantı Test Ediliyor...")
# Progress bar'ı başlat
progress_bar.start()
# SpeedTest nesnesi oluşturuluyor
st = speedtest.Speedtest()
st.get_best_server() # En iyi sunucuyu seçiyor
# Ping, download ve upload hızlarını alıyoruz
ping = st.results.ping
download_speed = st.download() / 1_000_000 # Mbps cinsinden
upload_speed = st.upload() / 1_000_000 # Mbps cinsinden
# Sonuçları GUI'ye yazdırıyoruz
ping_label.config(text=f"Ping: {ping} ms")
download_label.config(text=f"İndirme Hızı: {download_speed:.2f} Mbps")
upload_label.config(text=f"Yükleme Hızı: {upload_speed:.2f} Mbps")
# Bağlantı durumu güncelle
update_connection_status("Bağlantı Başarılı!")
# Progress bar'ı durdur
progress_bar.stop()
# Grafik verilerini hazırlıyoruz
data = [ping, download_speed, upload_speed]
labels = ['Ping (ms)', 'İndirme (Mbps)', 'Yükleme (Mbps)']
# Grafik çizimi
ax.clear()
ax.bar(labels, data, color=['red', 'blue', 'green'])
ax.set_ylabel('Hız / Ping')
ax.set_title('Hız Testi Sonuçları')
# Grafik gösterimi
canvas.draw()
# Grafik widget'ını görünür yapıyoruz
canvas.get_tk_widget().pack(pady=20)
# Form boyutunu grafiğe göre güncelleme
root.geometry("600x650")
except Exception as e:
messagebox.showerror("Hata", f"Bir hata oluştu: {e}")
progress_bar.stop() # Hata durumunda progress bar'ı durdur
# Grafik widget'ını gizli tut
canvas.get_tk_widget().pack_forget()
# ALG Yazılım linkine tıklanması için fonksiyon
def open_website(event=None):
webbrowser.open("https://algyazilim.com")
# Hakkında formunu oluştur
def open_about():
about_window = tk.Toplevel(root)
about_window.title("Hakkında")
about_window.geometry("600x350")
about_window.config(bg="#f0f0f0")
about_window.resizable(False, False)
# Hakkında formunu merkeze yerleştir
about_window.geometry("+{}+{}".format(int(root.winfo_width()/2 - 300), int(root.winfo_height()/2 - 175)))
# Canvas ekle
canvas = tk.Canvas(about_window, bg="#f0f0f0", width=380, height=220)
canvas.pack(pady=20)
# Hakkında metni için bir Label oluştur
about_text = "ALG Yazılım, yazılım geliştirme alanında uzmanlaşmış bir teknoloji şirketidir. \n" \
"Müşterilerine yenilikçi çözümler sunmayı hedefler. \n\n" \
"İnternet hız testi, yazılım geliştirme ve çeşitli dijital hizmetler sunar."
about_label = tk.Label(canvas, text=about_text, font=("Helvetica", 12), bg="#f0f0f0", fg="#2c3e50", justify="left")
about_label.pack(padx=10, pady=10)
# Logo Resmi
logo_url = "https://yazilim.algyazilim.com/wp-content/uploads/2023/09/ALG-Yazilim-.png"
response = requests.get(logo_url)
img_data = response.content
img = Image.open(BytesIO(img_data))
img = img.resize((150, 150), Image.Resampling.LANCZOS) # Logoyu uygun boyutlandır
logo = ImageTk.PhotoImage(img)
# Logo'yu formda yerleştirme
logo_label = tk.Label(about_window, image=logo, bg="#f0f0f0")
logo_label.image = logo # Referans tutmak için ekleme
logo_label.pack(pady=10)
# ALG Yazılım Inc.© - 2024 yazısı ekleniyor
footer_label = tk.Label(about_window, text="ALG Yazılım Inc.© - 2024", font=("Helvetica", 10), fg="#2980b9", bg="#f0f0f0")
footer_label.pack(pady=5)
# Logo ve yazıya tıklanabilirlik ekliyoruz
logo_label.bind("<Button-1>", open_website)
footer_label.bind("<Button-1>", open_website)
# Ana pencereyi oluştur
root = tk.Tk()
root.title("INT TestSpeed App | ALG Yazılım Inc.© 2024")
root.geometry("600x600")
root.config(bg="#2c3e50") # Arka plan rengini koyu yapıyoruz
root.resizable(False, False) # Formu sabitle
# Ana formu merkeze yerleştir
root.geometry("+{}+{}".format(int(root.winfo_screenwidth()/2 - 300), int(root.winfo_screenheight()/2 - 300)))
# Menü barı oluştur
menu_bar = tk.Menu(root)
root.config(menu=menu_bar)
# Bağlantı durumu etiketi
connection_status_label = tk.Label(root, text="Bağlantı Durumu: Bağlantı Bekleniyor...", font=("Helvetica", 12), fg="white", bg="#2c3e50")
connection_status_label.pack()
# Ping, download ve upload etiketlerini oluştur
ping_label = tk.Label(root, text="Ping: 0 ms", font=("Helvetica", 14), fg="white", bg="#2c3e50")
ping_label.pack(pady=5)
download_label = tk.Label(root, text="İndirme Hızı: 0 Mbps", font=("Helvetica", 14), fg="white", bg="#2c3e50")
download_label.pack(pady=5)
upload_label = tk.Label(root, text="Yükleme Hızı: 0 Mbps", font=("Helvetica", 14), fg="white", bg="#2c3e50")
upload_label.pack(pady=5)
# Test başlatma butonu
start_button = tk.Button(root, text="Test Başlat", font=("Helvetica", 12), bg="#8eba00", fg="white", command=lambda: threading.Thread(target=run_speed_test).start())
start_button.pack(pady=20)
# Progress bar'ı ekle
progress_bar = ttk.Progressbar(root, length=200, mode="indeterminate")
progress_bar.pack(pady=20)
# Grafik alanını oluştur
fig, ax = plt.subplots(figsize=(6, 3))
canvas = FigureCanvasTkAgg(fig, master=root)
# Hakkında butonunu ekle
about_button = tk.Button(root, text="Hakkında", font=("Helvetica", 12), bg="#8eba00", fg="white", command=open_about)
about_button.pack(pady=10)
# Uygulamayı başlat
root.mainloop()
PythonKayıt Edelim
CTRL + O
CTRL + X
CTRL + X
Direk Çalıştırmak İçin
$ Python3 speed.py
BashDerlemek İçin
$ pyinstaller --onefile --noconsole speed.py
BashNOT: NOT: Derleme İşlemi İçin pyinstaller kurulu olmalıdır. Kurulu Değilse Kurmak İçin.
Dip Not: Linux da Çalıştırmak İçin Linux da Derleyin.
Windows da Çalıştırmak İçin VSCode ile Windows da Derleyin
Aynı Şekilde MacOS de Çalıştırmak İçin MacOS de Derleyin.
$ pip install pyinstaller
Dip Not: Linux da Çalıştırmak İçin Linux da Derleyin.
Windows da Çalıştırmak İçin VSCode ile Windows da Derleyin
Aynı Şekilde MacOS de Çalıştırmak İçin MacOS de Derleyin.