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

news2024/11/22 14:53:01

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

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

详细代码如下:

import tkinter as tk  
from tkinter import ttk
import psutil  
import time
  
class myClass:
    def __init__(self):
        # 创建主窗口 
        self.root = tk.Tk()  
        self.root.title("配置窗口")
        self.root.geometry("400x300") # 设定窗口大小为300像素宽,200像素高
        self.x = 0
        #监控系统网络资源,包含上传下载等...
        self.net_io_counters = psutil.net_io_counters()  
        self.download_speed_b = self.net_io_counters.bytes_recv 
        self.upload_speed_b = self.net_io_counters.bytes_sent

    def mainWin(self):
        root = self.root
        self.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 += 1
        self.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 += 1
        ttk.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:
                self.netwok = tk.Label(self.sWin, font=("times", 20, "bold"), bg="white")  
                self.netwok.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.net_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/s
            self.upload_speed = round((self.upload_speed_a - self.upload_speed_b) / 1024,2) # round(x,2) 浮点数保留两位小数
            self.download_speed_b = self.download_speed_a
            self.upload_speed_b = self.upload_speed_a

            self.netwok.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:
                self.netwok.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档案可以放到任意其他电脑上,双击直接执行,不需要其他电脑先下载库文件等等
以下是示例照片:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1171755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习 AIGC】stable diffusion webUI 使用过程,参数设置,教程,使用方法

文章目录 docker快速启动vae.ckpt或者.safetensorsCFG指数/CFG Scale面部修复/Restore facesRefinerTiled VAEClip Skipprompt提示词怎么写 docker快速启动 如果你想使用docker快速启动这个项目&#xff0c;你可以按下面这么操作&#xff08;显卡支持CUDA11.8&#xff09;。如…

【蓝桥每日一题]-倍增(保姆级教程 篇1)

今天讲一下倍增 目录 题目&#xff1a;忠诚 思路&#xff1a; 题目&#xff1a;国旗计划 思路&#xff1a; 查询迭代类倍增&#xff1a; 本质是一个一个选区间使总长度达到 M,类似凑一个数。而我们会经常用不大于它最大的二的次幂&#xff0c;减去之后&#xff0c;再重复这…

VSCode中的任务什么情况下需要配置多个问题匹配器problemMatcher?多个问题匹配器之间的关系是什么?

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、简介 在 VS Code 中&#xff0c;tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题&#xff08;错误、警告等&#xff09;。 problemMatcher是一个描述问题匹配器的接口&…

leetCode 416.分割等和子集 + 01背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化

关于此题我的往期文章&#xff1a; LeetCode 416.分割等和子集&#xff08;动态规划【0-1背包问题】采用一维数组dp:滚动数组&#xff09;_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133212716看本期文章时&…

JAVA-软开-常见八股文(2)-数据库相关

1 Drop Delete Truncate三者之间的区别和联系 drop删除整张表&#xff0c;包括表结构和表数据。用法 drop table 表名 truncate表示清空数据&#xff0c;不会删除表结构。truncate table 表名 delete表示删除数据&#xff0c;不会删除表结构。delete from 表名 where 列名 值…

虽然许多人表示对Windows 11的透明任务栏不满,但有时效果还是挺好的

Windows 11支持透明任务栏&#xff0c;这项功能可以在几秒钟内启用&#xff0c;但许多人表示他们对它的工作方式不满意。 在今天的指南中&#xff0c;我们将向你展示如何使用此功能&#xff0c;并通过一些技巧进一步自定义任务栏。 如何在Windows 11中使任务栏透明 使用个性…

【Linux】第十站:git和gdb的基本使用

文章目录 一、git的基本操作1.gitee新建仓库注意事项2.git的安装3.git的克隆4.git的add5.git的commit6.git的push7.git log8.git status9. .gitignore 二、Linux调试器---gdb1.背景2.gdb安装、进入与退出3.list/l4.r/run运行程序5. break/b 打断点6.info/i b 查看断点7.delete/…

如何使用Selenium处理Cookie,今天彻底学会了

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

搜索引擎系统简要分析

目录 一、搜索引擎简单介绍 二、搜索引擎整体架构和工作过程 &#xff08;一&#xff09;整体分析 &#xff08;二&#xff09;爬虫系统 三个基本点 爬虫系统的工作流程 关键考虑因素和挑战 &#xff08;三&#xff09;索引系统 网页处理阶段 预处理阶段 反作弊分析…

【Linux】多路IO复用技术②——poll详解如何使用poll模型实现简易的一对多服务器(附图解与代码实现)

在阅读本篇博客之前&#xff0c;建议大家先去看一下我之前写的这篇博客&#xff0c;否则你很可能会一头雾水 【Linux】多路IO复用技术①——select详解&如何使用select模型在本地主机实现简易的一对多服务器&#xff08;附图解与代码实现&#xff09;http://t.csdnimg.cn/…

arcgis pro模型构建器

如果你不想部署代码包环境来写arcpy代码&#xff0c;还想实现批量或便携封装的操作工具&#xff0c;那么使用模型构建器是最好的选择。1.简介模型构建器 1.1双击打开模型构建器 1.2简单模型构建步骤 先梳理整个操作流程&#xff0c;在纸上绘制在工具箱中找到所需工具拖进来把…

Trajectory-guided Control Prediction for End-to-end Autonomous Driving论文学习

1. 解决了什么问题&#xff1f; 端到端自动驾驶方法直接将原始传感器数据映射为规划轨迹或控制信号&#xff0c;范式非常简洁&#xff0c;从理论上避免了多模块设计的错误叠加问题和繁琐的人为规则设计。当前的端到端自动驾驶方法主要有两条独立的研究路线&#xff0c;要么基于…

学习经验分享【NO.18】YOLOv5可视化特征图教程(持续更新)

YOLOv5项目的6.0以上版本中的detect.pt中集成了可视化相关模块&#xff0c;直接调用即可。 一、可视化特征提取网络中所有模块的可视化图 添加形参如下所示&#xff0c;加载相应的权值文件后&#xff0c;选择相应的图片。 运行detect.py文件后得到如下所示&#xff1a; 以stag…

visual basic 6.0软件安装包(永久),适用于Windows各系统附安装教程

软件说明 visual basic 6.0中文版是一种由微软公司开发的包含协助开发环境的事件驱动编程语言&#xff0c;它源自于BASIC编程语言&#xff0c;拥有图形用户界面&#xff08;GUI&#xff09;和快速应用程序开发&#xff08;RAD&#xff09;系统&#xff0c;可以轻易的使用DAO、…

JavaScript处理字符串

字符串(String)是不可变的、有限数量的字符序列&#xff0c;字符包括可见字符、不可见字符和转义字符。在程序设计中&#xff0c;经常需要处理字符串&#xff0c;如复制、替换、连接、比较、查找、截取、分割等。在JavaScript中&#xff0c;字符串是一类简单值&#xff0c;直接…

基于51单片机的烟雾和温湿度检测控制系统仿真(智能防火系统,火灾报警灭火系统)

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;单片机防火 获取完整源码源文件仿真源文件论文报告说明文档等 基于51单片机的光照及温湿度检测报警控制系统 由STC89C52单片机LCD1602液晶显示屏ADC0832模块蜂鸣器DHT11温湿度传感器 烟雾传感器LED按键构成 具体功能&…

【LeetCode刷题-队列】--933.最近的请求次数

933.最近的请求次数 class RecentCounter {Queue<Integer> queue new LinkedList<>();public RecentCounter() {}public int ping(int t) {queue.offer(t);while(t - queue.peek() > 3000){queue.poll();}return queue.size();} }/*** Your RecentCounter obje…

汽车标定技术(三)--XCP协议如何支持测量功能

目录 1. 概述 2. 测量方式 -- Poll 3. 测量方式 -- DAQ 3.1 ODT概念模型 3.2 DAQ List概念 3.3 ODT 绝对编号和相对编号 3.4 静态DAQ和动态DAQ模式 &#xff08;1&#xff09;静态DAQ &#xff08;2&#xff09;动态DAQ 4.小结 1. 概述 在该系列的首篇文章汽车标定技…

如何导入HTTParty库

HTTParty是一个Ruby的HTTP客户端库&#xff0c;用于发送HTTP请求。以下是在Ruby代码中导入HTTParty库的步骤&#xff1a; 在Gemfile文件中添加HTTParty库的依赖。打开Gemfile文件&#xff0c;并在其中添加以下行&#xff1a; gem ‘httparty’ 在终端中运行bundle install命令…

FreeRTOS_事件标志组

目录 1. 事件标志组简介 2. 创建事件标志组 2.1 函数 xEventGroupCreate() 2.2 函数 xEventGroupCreateStatic() 3. 设置事件位 3.1 函数 xEventGroupClearBits() 3.2 函数 xEventGroupClearBitsFromISR() 3.3 函数 xEventGroupSetBits() 3.4 函数 xEventGroupSetB…