如何建广告网站,企业网站建设方案书 范本,邵阳小学网站建设,模板网站修改工具介绍#xff1a;
这是一个功能完整的网络测速工具#xff0c;可以测试网络的下载速度、上传速度和延迟。
功能特点#xff1a;
1. 速度测试 - 下载速度测试 - 上传速度测试 - Ping延迟测试 - 自动选择最佳服务器
2. 实时显示 - 进度条显示测试进度 - 实时显示测试状…
工具介绍
这是一个功能完整的网络测速工具可以测试网络的下载速度、上传速度和延迟。
功能特点
1. 速度测试 - 下载速度测试 - 上传速度测试 - Ping延迟测试 - 自动选择最佳服务器
2. 实时显示 - 进度条显示测试进度 - 实时显示测试状态 - 清晰的数据展示
3. 历史记录 - 保存测试历史 - 显示最近6次测试结果 - 支持导出历史记录
使用要求
- Python 3.6
- 需要安装的库 python -m pip install speedtest-cli
使用方法
1. 安装依赖 - 首先安装必要的库 - 确保网络连接正常
2. 开始测速 - 点击开始测速按钮 - 等待测试完成约1-2分钟 - 查看测试结果
3. 历史记录 - 自动保存每次测试结果 - 查看最近的测试历史 - 可导出完整历史记录
完整代码
import tkinter as tk
from tkinter import ttk, messagebox
try:import speedtest
except ImportError:messagebox.showerror(错误, 请先安装 speedtest-cli:\npip install speedtest-cli)raise
import threading
import time
from datetime import datetime
import json
import os
from pathlib import Pathclass NetworkSpeedTest:def __init__(self):self.window tk.Tk()self.window.title(网络测速工具)self.window.geometry(600x500)# 创建主框架self.main_frame ttk.Frame(self.window, padding10)self.main_frame.grid(row0, column0, sticky(tk.W, tk.E, tk.N, tk.S))# 测速结果显示self.setup_display()# 控制按钮self.setup_controls()# 历史记录self.setup_history()# 初始化speedtestself.st Noneself.testing Falseself.history_file Path.home() / .speedtest_history.jsonself.load_history()def setup_display(self):# 当前速度显示display_frame ttk.LabelFrame(self.main_frame, text测速结果, padding10)display_frame.grid(row0, column0, sticky(tk.W, tk.E), pady10)# 下载速度ttk.Label(display_frame, text下载速度:).grid(row0, column0, pady5)self.download_speed ttk.Label(display_frame, text-- Mbps)self.download_speed.grid(row0, column1, padx20)# 上传速度ttk.Label(display_frame, text上传速度:).grid(row1, column0, pady5)self.upload_speed ttk.Label(display_frame, text-- Mbps)self.upload_speed.grid(row1, column1, padx20)# Ping值ttk.Label(display_frame, textPing延迟:).grid(row2, column0, pady5)self.ping ttk.Label(display_frame, text-- ms)self.ping.grid(row2, column1, padx20)# 服务器信息ttk.Label(display_frame, text测速服务器:).grid(row3, column0, pady5)self.server_info ttk.Label(display_frame, text--)self.server_info.grid(row3, column1, padx20)# 进度条self.progress ttk.Progressbar(display_frame, length300, modedeterminate)self.progress.grid(row4, column0, columnspan2, pady10)# 状态标签self.status ttk.Label(display_frame, text就绪)self.status.grid(row5, column0, columnspan2)def setup_controls(self):control_frame ttk.Frame(self.main_frame)control_frame.grid(row1, column0, pady10)self.start_button ttk.Button(control_frame, text开始测速, commandself.start_test)self.start_button.grid(row0, column0, padx5)ttk.Button(control_frame, text导出历史, commandself.export_history).grid(row0, column1, padx5)def setup_history(self):history_frame ttk.LabelFrame(self.main_frame, text历史记录, padding10)history_frame.grid(row2, column0, sticky(tk.W, tk.E), pady10)# 创建表格columns (time, download, upload, ping)self.history_tree ttk.Treeview(history_frame, columnscolumns, height6)self.history_tree.heading(time, text时间)self.history_tree.heading(download, text下载(Mbps))self.history_tree.heading(upload, text上传(Mbps))self.history_tree.heading(ping, textPing(ms))self.history_tree.column(#0, width0, stretchtk.NO)self.history_tree.column(time, width150)self.history_tree.column(download, width100)self.history_tree.column(upload, width100)self.history_tree.column(ping, width100)self.history_tree.grid(row0, column0)def load_history(self):if self.history_file.exists():try:with open(self.history_file, r) as f:self.history json.load(f)self.update_history_display()except:self.history []else:self.history []def save_history(self):with open(self.history_file, w) as f:json.dump(self.history, f)def update_history_display(self):for item in self.history_tree.get_children():self.history_tree.delete(item)for record in self.history[-6:]: # 只显示最近6条记录self.history_tree.insert(, 0, values(record[time],f{record[download]:.1f},f{record[upload]:.1f},f{record[ping]:.0f}))def start_test(self):if self.testing:returnself.testing Trueself.start_button[state] disabledself.progress[value] 0self.status[text] 正在初始化...# 在新线程中运行测速threading.Thread(targetself.run_speedtest, daemonTrue).start()def run_speedtest(self):try:# 初始化self.status[text] 正在连接到测速服务器...self.st speedtest.Speedtest()self.progress[value] 20# 选择服务器self.status[text] 正在选择最佳服务器...server self.st.get_best_server()self.server_info[text] f{server[sponsor]} ({server[name]})self.progress[value] 40# 测试下载速度self.status[text] 正在测试下载速度...download_speed self.st.download() / 1_000_000 # 转换为Mbpsself.download_speed[text] f{download_speed:.1f} Mbpsself.progress[value] 60# 测试上传速度self.status[text] 正在测试上传速度...upload_speed self.st.upload() / 1_000_000 # 转换为Mbpsself.upload_speed[text] f{upload_speed:.1f} Mbpsself.progress[value] 80# 获取ping值ping_time server[latency]self.ping[text] f{ping_time:.0f} msself.progress[value] 100# 保存结果self.history.append({time: datetime.now().strftime(%Y-%m-%d %H:%M:%S),download: download_speed,upload: upload_speed,ping: ping_time})self.save_history()self.update_history_display()self.status[text] 测速完成except Exception as e:messagebox.showerror(错误, f测速过程中出错{str(e)})self.status[text] 测速失败finally:self.testing Falseself.start_button[state] normaldef export_history(self):if not self.history:messagebox.showinfo(提示, 没有历史记录可供导出)returnfile_path tk.filedialog.asksaveasfilename(defaultextension.csv,filetypes[(CSV files, *.csv)],initialfilespeedtest_history.csv)if file_path:try:with open(file_path, w, encodingutf-8) as f:f.write(时间,下载速度(Mbps),上传速度(Mbps),Ping延迟(ms)\n)for record in self.history:f.write(f{record[time]},{record[download]:.1f},f{record[upload]:.1f},{record[ping]:.0f}\n)messagebox.showinfo(成功, 历史记录已导出)except Exception as e:messagebox.showerror(错误, f导出过程中出错{str(e)})def run(self):self.window.mainloop()if __name__ __main__:app NetworkSpeedTest()app.run()