![]()
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()