窗口小插件,用于显示当前系统时间,CPU与内存占用率,网络上传下载速度

编程入门 行业动态 更新时间:2024-10-21 18:32:53

窗口小插件,用于显示当前系统时间,CPU与内存占用率,网络上传<a href=https://www.elefans.com/category/jswz/34/1716195.html style=下载速度"/>

窗口小插件,用于显示当前系统时间,CPU与内存占用率,网络上传下载速度

最近在弄一个小玩意儿,旨在生成一个窗口小插件,用于显示当前系统时间,CPU与内存占用率,网络上传下载速度
初始目标:

  1. 生成一个弹窗,窗口置顶
  2. 弹窗内可以进行设定,勾选想要显示的对应信息,调整窗口透明度
  3. 在用户关闭应用时结束程序
  4. 最后打包成一个可执行的文件,不以python档案存在
    前置条件:
    python3
    需要额外安装的库:
    tkinter 生成窗口
    psutil 监控系统资源
    pyinstaller 打包python脚本成exe档案

详细代码如下:

import tkinter as tk  
from tkinter import ttk
import psutil  
import timeclass myClass:def __init__(self):# 创建主窗口 self.root = tk.Tk()  self.root.title("配置窗口")self.root.geometry("400x300") # 设定窗口大小为300像素宽,200像素高self.x = 0#监控系统网络资源,包含上传下载等...self_io_counters = psutil_io_counters()  self.download_speed_b = self_io_counters.bytes_recv self.upload_speed_b = self_io_counters.bytes_sentdef mainWin(self):root = self.rootself.var1 = tk.IntVar() # 创建变量用于选项1的勾选状态 self.r = 1   #生成一个按钮在root上,显示文字为 ’时间‘check1 = ttk.Checkbutton(root, text="时间", variable=self.var1) #把按钮显示在窗口上 row 和 column代表位置,padx,pady表示和边界距离check1.grid(row=self.r, column=0, padx=10,pady=10) self.r += 1     #每一项往下移动一行,避免显示覆盖self.var2 = tk.IntVar()check2 = ttk.Checkbutton(root, text="CPU与内存", variable=self.var2)  check2.grid(row=self.r, column=0, padx=10,pady=10)self.r += 1self.var3 = tk.IntVar() check3 = ttk.Checkbutton(root, text="网络", variable=self.var3)  check3.grid(row=self.r, column=0, padx=10,pady=10)self.r += 1# 创建滑动条提示self.var4 = tk.Text(root, height=1, width=25)self.var4.grid(row=self.r,column=0,padx=10,pady=10)self.var4.insert(tk.END, "高 <--窗口透明度--> 低")self.r += 1#创建滑动条 (4-100)设定为0的话,全透明,到时找不到怎么关窗口了  slider = ttk.Scale(root, from_=4, to=100, orient=tk.HORIZONTAL, command=self.on_slider_change)  slider.grid(row=self.r, column=0, padx=10,pady=10)# 创建文本框用于显示选择值  self.text_box = tk.Text(root, height=1, width=5)  self.text_box.grid(row=self.r, column=1, padx=10,pady=10)self.r += 1ttk.Button(root, text="执行配置", command=self.updateInfo).grid(row=self.r, column=0, padx=10)#root.attributes("-alpha", 1)  # 设置主窗口默认窗口透明度    root.mainloop()def on_slider_change(self,value):self.value = round(float(value),1) self.text_box.delete(1.0, tk.END)  # 清空文本框内容  self.text_box.insert(tk.END, self.value)  # 插入当前选择值到文本框self.root.attributes("-alpha", self.value/100)  # 设置窗口透明度 def updateInfo(self):#self.root.withdraw()if self.x == 0:self.sWin = tk.Tk()self.sWin.attributes("-topmost", True) # 将窗口置于其他窗口之上  self.sWin.attributes("-alpha", self.value/100)  # 设置窗口透明度self.sWin.protocol("WM_DELETE_WINDOW", self.closeRoot)   #设定点击右上角"X"时执行的动作if self.var1.get() == 1:#设定一个标签 tk.Label(窗口,font=(字体,大小,样式【bold粗体】),bg="white" 背景颜色为白色)self.clock = tk.Label(self.sWin, font=("times", 40, "bold"), bg="white") #内容显示到窗口中,fill="both"上下都填充,expand=1允许填充 self.clock.pack(fill="both", expand=1)if self.var2.get() == 1:self.cpumem = tk.Label(self.sWin, font=("times", 20, "bold"), bg="white")  self.cpumem.pack(fill="both", expand=1)if self.var3.get() == 1:selfwok = tk.Label(self.sWin, font=("times", 20, "bold"), bg="white")  selfwok.pack(fill="both", expand=1)self.x = 1#var1.get()  抓取我们窗口上 勾选选项的值,0为未勾选,1为勾选self.myvalue = [self.var1.get(),self.var2.get(),self.var3.get()]if self.myvalue[0] == 1:        #更新时间current_time = time.strftime("%H:%M:%S")  self.clock.config(text=current_time)if self.myvalue[1] == 1:    #更新CPU和mem使用率cpu = str(psutil.cpu_percent())mem = str(psutil.virtual_memory().percent)#下面时判断下内存占用率,大于70设定橘黄色,大于90红色,其他的黑色字体if (float(mem) > 70) or (float(cpu) > 70):self.mycolor = "orange"elif (float(mem) > 90) or (float(cpu) > 90):self.mycolor = "red"else:self.mycolor = "black"self.cpumem.config(text="cpu:"+cpu+"% mem:"+mem+"%",fg=self.mycolor)if self.myvalue[2] == 1:#更新网络上传下载速度#while True:net_io_counters = psutil_io_counters()self.download_speed_a = net_io_counters.bytes_recv  self.upload_speed_a = net_io_counters.bytes_sent   self.download_speed = round((self.download_speed_a - self.download_speed_b) / 1024,2) # 转换为KB/sself.upload_speed = round((self.upload_speed_a - self.upload_speed_b) / 1024,2) # round(x,2) 浮点数保留两位小数self.download_speed_b = self.download_speed_aself.upload_speed_b = self.upload_speed_aselfwok.config(text="up:"+str(self.upload_speed)+"KB/s down:"+str(self.download_speed)+"KB/s")if self.myvalue[0] == 1:#等待1000ms,再次执行函数,旨在每秒刷新一次窗口显示的内容self.clock.after(1000, self.updateInfo)else:if self.myvalue[1] == 1:self.cpumem.after(1000, self.updateInfo)else:selfwok.after(1000, self.updateInfo)def closeRoot(self):#设定当我点击关闭窗口时,彻底破坏窗口。可以达到停止脚本运行的目的self.sWin.destroy()self.root.destroy()if __name__ == "__main__":app = myClass()app.mainWin()"""# 创建标签和输入框  
ttk.Label(root, text="用户名").grid(row=0)  
user_entry = ttk.Entry(root)  
user_entry.grid(row=0, column=1)  
ttk.Label(root, text="密码").grid(row=1)  
password_entry = ttk.Entry(root, show="*")  
password_entry.grid(row=1, column=1)"""

打包代码:
pyinstaller -w x.py -F
使用pyinstaller进行打包
-w 表示隐藏执行的CMD窗口
x.py 是python脚本
-F 代表打包成独立的执行文件,也就是一个exe档案,不加这个参数会多生成文件夹,放到其他环境需要把文件夹也带上,不然无法执行
执行完毕后会生成两个文件夹
build和dist
我们的执行文件再dist里面,这个exe档案可以放到任意其他电脑上,双击直接执行,不需要其他电脑先下载库文件等等
以下是示例照片:

更多推荐

窗口小插件,用于显示当前系统时间,CPU与内存占用率,网络上传下载速度

本文发布于:2023-11-16 18:39:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1631913.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:下载速度   插件   内存   窗口   占用率

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!