Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В тази статия ще разгледаме как да създадем професионално приложение за тест на интернет скорост. Скриптът използва библиотеките tkinter
, speedtest-cli
, и threading
на Python. Той предоставя лесен за употреба графичен интерфейс (GUI), който измерва скоростта на сваляне и качване на интернет връзката, както и пинг-а.
За да изпълните този скрипт, трябва да инсталирате нужните библиотеки. Следвайте стъпките по-долу:
speedtest-cli
Тази библиотека се използва за извършване на тестовете за интернет скорост. За да я инсталирате, отворете терминала или командния ред и въведете следната команда:
pip install speedtest-cli
Библиотеките tkinter
и threading
са вградени в Python. Те не изискват допълнителна инсталация.
Трябва да започнете със създаване на нов файл с разширение ".py". Отворете любимият си текстов редактор и добавете следният код:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import speedtest
import threading
import socket
class SpeedtestGUI:
def __init__(self, master):
self.master = master
master.title("Fedya Speedtest")
master.geometry("400x550")
master.configure(bg="#2c3e50")
style = ttk.Style()
style.theme_use("clam")
# Общи стилове
style.configure("TButton", padding=10, font=("Arial", 12), background="#2980b9", foreground="white")
style.map("TButton", background=[('active', '#3498db')])
style.configure("TLabel", background="#2c3e50", foreground="white", font=("Arial", 12))
style.configure("Header.TLabel", font=("Arial", 16, "bold"), background="#2c3e50", foreground="#ecf0f1")
style.configure("TFrame", background="#34495e")
# Прогрес бар стил
style.configure("TProgressbar", thickness=10, troughcolor="#34495e", background="#3498db")
self.create_widgets()
def create_widgets(self):
header = ttk.Label(self.master, text="Измерване на интернет скорост", style="Header.TLabel")
header.pack(pady=20)
self.progress = ttk.Progressbar(self.master, orient="horizontal", length=300, mode="indeterminate")
self.progress.pack(pady=10)
self.result_frame = ttk.Frame(self.master, padding="10")
self.result_frame.pack(fill="x", padx=20)
labels = ["Скорост на сваляне:", "Скорост на качване:", "Пинг:", "ISP:"]
self.result_labels = {}
for label in labels:
ttk.Label(self.result_frame, text=label).grid(column=0, row=len(self.result_labels), sticky="w", pady=5)
result_label = ttk.Label(self.result_frame, text="", font=("Arial", 12, "bold"), foreground="#ecf0f1")
result_label.grid(column=1, row=len(self.result_labels), sticky="e", pady=5)
self.result_labels[label] = result_label
self.start_button = ttk.Button(self.master, text="Започни тест", command=self.start_speedtest)
self.start_button.pack(pady=20)
self.status_label = ttk.Label(self.master, text="", font=("Arial", 10, "italic"), background="#2c3e50", foreground="#bdc3c7")
self.status_label.pack(pady=10)
def start_speedtest(self):
self.start_button.config(state="disabled")
self.progress.start()
self.status_label.config(text="Тестът започна. Моля, изчакайте...")
threading.Thread(target=self.run_speedtest, daemon=True).start()
def run_speedtest(self):
try:
s = speedtest.Speedtest()
self.master.after(0, self.update_status, "Избиране на най-добър сървър...")
s.get_best_server()
self.master.after(0, self.update_status, "Измерване на скорост на сваляне...")
download_speed = s.download() / 1_000_000 # Convert to Mbps
self.master.after(0, self.update_status, "Измерване на скорост на качване...")
upload_speed = s.upload() / 1_000_000 # Convert to Mbps
ping = s.results.ping
isp = s.results.client["isp"]
self.master.after(0, self.update_results, download_speed, upload_speed, ping, isp)
except Exception as e:
self.master.after(0, self.show_error, str(e))
finally:
self.master.after(0, self.reset_ui)
def update_results(self, download, upload, ping, isp):
self.result_labels["Скорост на сваляне:"].config(text=f"{download:.2f} Mbps")
self.result_labels["Скорост на качване:"].config(text=f"{upload:.2f} Mbps")
self.result_labels["Пинг:"].config(text=f"{ping:.2f} ms")
self.result_labels["ISP:"].config(text=isp)
self.status_label.config(text="Тестът завърши успешно!")
def show_error(self, error_message):
messagebox.showerror("Грешка", f"Възникна грешка при теста: {error_message}")
def reset_ui(self):
self.progress.stop()
self.start_button.config(state="normal")
def update_status(self, status):
self.status_label.config(text=status)
if __name__ == "__main__":
root = tk.Tk()
app = SpeedtestGUI(root)
root.mainloop()
Запазете файла и му дайте име, примерно speedtest-gui.py
За да стартирате скрипта, просто кликнете два пъти върху файла speedtest-gui.py
Този скрипт предоставя лесен и професионален начин за измерване на интернет скоростта чрез графичен интерфейс. С минимални настройки и лесна инсталация, можете да получите точни резултати за скоростта на вашата интернет връзка. Ако следвате внимателно инструкциите, ще можете бързо и лесно да създадете свое собствено приложение за тест на интернет скорост.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut