pip install speedtest-cli matplotlib tk
import speedtest
import tkinter as tk
from tkinter import ttk
import threading
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# Function to test internet speed
def test_speed():
st = speedtest.Speedtest()
st.get_best_server()
download_speed = round(st.download() / 1_000_000, 2) # Convert to Mbps
upload_speed = round(st.upload() / 1_000_000, 2) # Convert to Mbps
return download_speed, upload_speed
# Function to update the speed in GUI
def update_speed():
global speeds_download, speeds_upload
while True:
download, upload = test_speed()
speeds_download.append(download)
speeds_upload.append(upload)
lbl_download.config(text=f"Download Speed: {download} Mbps")
lbl_upload.config(text=f"Upload Speed: {upload} Mbps")
update_graph()
root.update_idletasks()
# Function to update the speed graph
def update_graph():
ax.clear()
ax.plot(speeds_download, label="Download Speed (Mbps)", color="blue")
ax.plot(speeds_upload, label="Upload Speed (Mbps)", color="red")
ax.set_title("Network Speed Over Time")
ax.set_xlabel("Test Count")
ax.set_ylabel("Speed (Mbps)")
ax.legend()
ax.grid()
canvas.draw()
# Tkinter GUI setup
root = tk.Tk()
root.title("Network Speed Monitor 🌐")
root.geometry("500x500")
lbl_title = tk.Label(root, text="📡 Network Speed Monitor", font=("Arial", 14, "bold"))
lbl_title.pack(pady=10)
lbl_download = tk.Label(root, text="Download Speed: -- Mbps", font=("Arial", 12))
lbl_download.pack(pady=5)
lbl_upload = tk.Label(root, text="Upload Speed: -- Mbps", font=("Arial", 12))
lbl_upload.pack(pady=5)
# Matplotlib graph setup
fig, ax = plt.subplots(figsize=(5, 3))
speeds_download = []
speeds_upload = []
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack()
# Run speed test in a separate thread
threading.Thread(target=update_speed, daemon=True).start()
root.mainloop()
No comments:
Post a Comment