狂自私

导航

显示网速的小窗口

 

 

 

import tkinter
import psutil
import time
from tkinter import *

on_X = 0    #此时鼠标的x坐标
on_Y = 0    #此时鼠标的y坐标

def make_app():
    app =Tk()
    app.geometry('100x50+1820+990')
    app.overrideredirect(True)  #隐藏标题栏
    app.config(bg='#303030')
    app.resizable(False,False)  #不允许拖动调整大小
    app.wm_attributes('-topmost',1)
    app.bind('<ButtonPress-1>',func=move_start) #鼠标左键按下
    app.bind('<ButtonRelease-1>',func=move_stop) #鼠标左键放开
    app.bind("<B1-Motion>",func=lambda event,app_=app:move_local(app_,event))

    Label(name='up',text='',bg='#303030',fg='white').pack(fill=tkinter.X)
    Label(name='dw',text='',bg='#303030',fg='white').pack(fill=tkinter.X)
    return app

def move_start(event):
    global on_X,on_Y
    on_X = event.x  #是程序界面的位置,而不是整个屏幕的位置
    on_Y = event.y

def move_stop(event):
    global on_X,on_Y
    on_X = None
    on_Y = None

def move_local(app,event):
    global on_X,on_Y
    x = app.winfo_x() + event.x - on_X
    y = app.winfo_y() + event.y - on_Y
    app.geometry("+{}+{}".format(x,y))

def get_speed():

    net_send_ = psutil.net_io_counters().bytes_sent    # 已发送的总的流量
    net_down_ = psutil.net_io_counters().bytes_recv    # 已接收的总的流量
    time.sleep(0.1)
    net_send = psutil.net_io_counters().bytes_sent - net_send_   # 0.5秒内的流量差值
    net_down = psutil.net_io_counters().bytes_recv - net_down_   # 0.5秒内的流量差值
    #除法结果保留两位小数
    def size_show(size):
        '''友好化文件大小字符串'''
        unit_dict = {0: r"B/s", 1: r"KB/s", 2: r"MB/s", 3: r"GB/s"}
        size = int(size)
        size_ = size
        unit_flag_int = 0
        while size_ > 1024:
            size_ = size_ / 1024
            unit_flag_int += 1
        ret_size = "{}{}".format(round(size_, 2), unit_dict[unit_flag_int])
        return ret_size
    #就是要乘以8才对的上
    return ("↑:{}".format(size_show(net_send*8)),"↓:{}".format(size_show(net_down*8)))

def ui_updata(do):
    data = do()
    #app下名字是lb2的子控件
    up  = app.children['up']
    dw  = app.children['dw']
    up.config(text=data[0])
    dw.config(text=data[1])
    #每0.5秒后调用lambda:ui_updata(do)函数
    app.after(500,lambda:ui_updata(do))

app = make_app()
#每0.5秒后调用ui_updata(speed_test)函数
app.after(500,lambda :ui_updata(get_speed))
app.mainloop()

 

posted on 2022-03-21 11:34  狂自私  阅读(64)  评论(0编辑  收藏  举报