python 实现一个简单的window 任务管理器

news/2025/3/26 3:11:39/

python">import tkinter as tk
from tkinter import ttk
import psutil# 运行此代码前,请确保已经安装了 psutil 库,可以使用 pip install psutil 进行安装。
# 由于获取进程信息可能会受到权限限制,某些进程的信息可能无法获取,代码中已经对可能出现的异常进行了处理。def get_process_info():process_list = []for proc in psutil.process_iter(['pid', 'name', 'memory_percent']):try:pid = proc.info['pid']name = proc.info['name']mem_percent = proc.info['memory_percent']process_list.append((pid, name, f'{mem_percent:.2f}%'))except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):continuereturn process_listdef populate_table():for item in process_table.get_children():process_table.delete(item)processes = get_process_info()for pid, name, mem_percent in processes:mem_value = float(mem_percent.strip('%'))tag = ""if mem_value > 10:tag = "high_mem"elif mem_value > 5:tag = "medium_mem"process_table.insert('', 'end', values=(pid, name, mem_percent), tags=(tag,))# 设置标签样式process_table.tag_configure("high_mem", foreground="red")process_table.tag_configure("medium_mem", foreground="green")def sort_table(column, reverse):data = [(process_table.set(item, column), item) for item in process_table.get_children('')]if column == 'PID':data.sort(key=lambda t: int(t[0]), reverse=reverse)elif column == '内存占用率':data.sort(key=lambda t: float(t[0].strip('%')), reverse=reverse)else:data.sort(key=lambda t: t[0], reverse=reverse)for index, (_, item) in enumerate(data):process_table.move(item, '', index)process_table.heading(column, command=lambda: sort_table(column, not reverse))root = tk.Tk()
root.title("任务管理器")
root.geometry("700x500")
root.configure(bg="#f4f4f9")style = ttk.Style()
style.theme_use('clam')
style.configure('Treeview', background="#e9e9f3", foreground="#333", fieldbackground="#e9e9f3",rowheight=25, font=('Segoe UI', 10))
style.map('Treeview', background=[('selected', '#73a6ff')])
style.configure('Treeview.Heading', background="#d1d1e0", foreground="#333", font=('Segoe UI', 10, 'bold'))columns = ('PID', '进程名称', '内存占用率')
process_table = ttk.Treeview(root, columns=columns, show='headings')
for col in columns:process_table.heading(col, text=col, command=lambda c=col: sort_table(c, False))process_table.column(col, width=200, anchor='center')
process_table.pack(pady=20, padx=20, fill=tk.BOTH, expand=True)populate_table()refresh_button = ttk.Button(root, text="刷新", command=populate_table)
refresh_button.pack(pady=10)root.mainloop()


http://www.ppmy.cn/news/1582615.html

相关文章

利用matlab实现贝叶斯优化算法(BO)优化梯度提升决策树(GBDT)

📌【导读】调GBDT超参数就像同时驯服多匹野马——学习率、树深度、叶子节点数等参数互相拉扯,手动调参效率堪比"海底捞月"。本文教你用Matlab的贝叶斯优化工具,像给模型装上GPS导航一样,20分钟自动锁定最优参数组合&…

弱网测试:全链路实战、高阶策略与自动化落地

在移动互联网时代,网络环境的不确定性成为用户体验的“隐形杀手”。弱网测试不仅是质量保障的必备环节,更是提升用户留存率和业务转化率的战略手段。 本文将从 工具链深度配置、复杂场景模拟、性能优化底层逻辑 和 自动化流水线集成 四个维度,彻底解析弱网测试的完整方法论…

【Python Cookbook】数据结构和算法(四)

目录 案例 目录 案例 数据结构和算法(一)1.将序列分解为单独的变量2.解压可迭代对象赋值给多个变量3.保留最后 N 个元素4.查找最大或最小的 N 个元素5.实现一个优先级队列数据结构和算法(三)11.命名切片12.序列中出现次数最多的元…

【linux指令】一文掌握 Sed 的详细用法(Sed 备忘清单)

文章目录 入门Sed 用法选项示例多个命令Sed 脚本Examples Sed 命令命令空间命令Flags循环命令杂项标志 Sed 示例替换文本搜索文本追加行编号前置行删除行文件间距 Sed 是一个流编辑器,此 Sed 备忘清单包含 Sed 命令和一些常见的 Sed 技巧。 入门 Sed 用法 语法 …

2.1.项目管理前言

项目管理核心模块深度解析 🚀 一、盈亏平衡分析(★关键基础) #mermaid-svg-mUYdSImAqBXUEISQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mUYdSImAqBXUEISQ .error-icon{fill…

从扩展黎曼泽塔函数构造物质和时空的结构-2

泽塔函数说的就是物质,物质就是能量的纠结。能量就是振动的谐波,谐波不纠结的时候就叫场,体现为能量形式,纠结的时候就叫物质,体现为质量的形式。那么能量形式的场和质量形式的物质是这么对应的呢? 考虑麦克…

C++ 学习笔记(四)—— 类和对象

1、this指针 class Date { public:void Init(Date* this, int year, int month, int day){this->_year year;this->_month month;this->_day day;this->Print();// 这就是this指针,是编译器自己加的,是用来让成员函数找到成…

fatal: Unable to create /.git/index.lock‘: File exists.

背景 在使用命令提交代码或文档时,出现提交失败问题 报错 fatal: Unable to create D:/workspace-nxg/blog-star/obsidian-notes/.git/index.lock: File exists.Another git process seems to be running in this repository, e.g. an editor opened by git comm…