GUI经典实践-网速测试小工具-1

2022-06-17 09:06:58 浏览数 (1)

关于 SpeedTest

speedtest 是世界上流行的网速测试平台,python 有其对应的库名为 speedtest-cli。我们可以使用其客户端进行网络测试,也可以使用类对象用代码去测试。我们执行 pip3 install speedtest-cli 即可安装。

网速测试小工具

代码

代码语言:javascript复制
from speedtest_cli import Speedtest

# 实例化测试类
spt = Speedtest()

# 获取最快的服务器
spt.get_best_server()

print('=============== 开始测试下载速度 ================')

# 测试下载速度,单位是Byte
downSp = spt.download()

# 打印结果,转换为Mb
print(f'=============== 下载速度是:{downSp /1024/1024:.2f} Mb/s ================')

print('=============== 开始测试上传速度 ================')

# 测试上传速度,单位是Byte
upSp = spt.upload()

print(f'=============== 上传速度是:{upSp /1024/1024:.2f} Mb/s ================')

代码-v2

我们考虑做一个 GUI 的测试小工具。

代码语言:javascript复制
# -*- coding: utf-8 -*-
import PySimpleGUI as sg
from speedtest_cli import Speedtest
import threading

# 实例化测速对象
spt = Speedtest()

# 设置主题
sg.theme('Black')

# 布局元素
one_line = [sg.Text('最佳服务器:'),sg.Text(size=(50,1),key='-BSTS-')]
two_line = [sg.Text('下载速度:'),sg.Text(size=(50,1),key='-DLS-')]
three_line = [sg.Text('上传速度:'),sg.Text(size=(50,1),key='-UPS-')]
four_line = [sg.Button('开始测试'),sg.Button('退出')]
five_line = [sg.Text(size=(50,1),key='-INFO-')]

# 布局
layout = [
    one_line,
    two_line,
    three_line,
    four_line,
    five_line
]


# 创建窗口
window = sg.Window('网速测试小工具', layout)

# 事件循环 event loop
while True:

    event, values = window.read(timeout=100)
    if event in (sg.WIN_CLOSED, '退出'):
        # 用户关闭窗口或者点击退出后退出
        break

    if event == '开始测试':

        # 按照如下代码,窗体将会出现未响应的问题
        window['-INFO-'].update('开始获取服务器...',text_color='red')
        res = spt.best.get('sponsor')
        print(res)
        window['-BSTS-'].update(res,text_color='yellow')

        window['-INFO-'].update('开始获测试下载速率...',text_color='red')
        dSp1=spt.download()
        dSp=f'{dSp1/1024/1024:.2f} Mb/s'
        window['-DLS-'].update(dSp,text_color='yellow')

        window['-INFO-'].update('开始获测试上传速率...',text_color='red')
        uSp1=spt.upload()
        uSp=f'{uSp1/1024/1024:.2f} Mb/s'
        window['-UPS-'].update(uSp,text_color='yellow')

        window['-INFO-'].update('测试完成...',text_color='red')
        sg.popup_ok

        print(f'Event: {event}')
        print(str(values))

window.close()

代码分析

以上代码,整体上分为两部分,第一部分使用 speedtest-cli 来测速。第二部分通过 PySimpleGUI 来和用户进行交互。我们在 GUI 的事件循环中检测当发生 “开始测试” 事件的时候开始进行测速,同时对 GUI 的文本元素进行更新以提示用户当前的进度。

效果

到此,网速测试小工具开发完成,赶紧去试试吧。

Tip

眼尖的你可能已经发现,或者在你实践的过程中也会发现,当我们点击开始测试的时候,窗口会变成未响应的状态,而且中间需要更新的内容也没有出现,只在最后展示了测试结果。这是为什么呢?下节我们来揭晓。

以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

0 人点赞