本文将详细讲解如何使用Python实现Linux操作系统的任务管理器可视化功能。我们将使用psutil库来读取系统相关的进程信息,并使用Python下的GUI库Tkinter来实现图形化界面。攻略分为以下几个步骤。
环境准备
首先需要确保在Linux系统上已经安装了Python和Tkinter库。如果没有安装Tkinter库,可以通过以下命令进行安装:
sudo apt-get install python-tk
此外,我们还需要安装psutil库:
sudo pip install psutil
设计图形化界面
任务管理器通常分为两部分:进程列表和进程详情。我们可以使用表格控件将进程列表展现出来,当用户选择某个进程时,在界面右侧展示该进程的详细信息。
我们可以使用Tkinter下的Tk()类来创建应用窗口,并使用Frame控件来设计窗口内部的布局。在本示例中,我们选择水平分割窗口,左侧窗口为表格控件,右侧窗口放置文本控件展示进程详情。示例代码如下:
import tkinter as tk
from tkinter import ttk
class Taskmgr(tk.Frame):
def __init__(self, master=None, **kwargs):
tk.Frame.__init__(self, master, **kwargs)
#左侧窗口:进程列表
self.procTable = ttk.Treeview(self)
self.procTable["columns"]=("pid","name","status")
self.procTable.column("pid", width=50)
self.procTable.column("name", width=200)
self.procTable.column("status", width=100)
self.procTable.heading("pid", text="PID")
self.procTable.heading("name", text="Name")
self.procTable.heading("status", text="Status")
#右侧窗口:进程详情
self.procDetail = tk.Text(self, width=80)
#设置控件尺寸和布局
self.procTable.grid(row=0, column=0, sticky="nsew")
self.procDetail.grid(row=0, column=1, sticky="nsew")
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(1, weight=1)
提取进程信息
我们可以使用psutil库来提取Linux系统的进程信息。psutil提供了简单而丰富的进程信息读取方法,使用非常方便。
import psutil
for pid in psutil.pids():
p = psutil.Process(pid)
print(p.name(), p.status())
更新进程列表
我们需要定期更新进程列表,以反映系统当前的进程运行状况。我们可以使用定时器来实现定期更新。
def updateProcList(self):
#清空表格
for item in self.procTable.get_children():
self.procTable.delete(item)
#插入新的进程信息
for pid in psutil.pids():
p = psutil.Process(pid)
self.procTable.insert("", "end", values=(p.pid, p.name(), p.status()))
def start(self):
self.updateProcList()
self.after(5000, self.start) #每隔5秒自动刷新列表
显示进程详情
当用户选择某个进程时,我们需要在界面右侧展示该进程的详细信息。我们可以使用Text控件来完成这个功能。
def showProcDetail(self, event):
#获取当前选中的进程pid
procPid = self.procTable.item(self.procTable.focus())["values"][0]
#获取该进程的信息并展示在右侧窗口中
p = psutil.Process(procPid)
self.procDetail.delete(1.0, "end")
self.procDetail.insert("end", "PID: {}\n".format(p.pid))
self.procDetail.insert("end", "Name: {}\n".format(p.name()))
self.procDetail.insert("end", "Status: {}\n".format(p.status()))
self.procDetail.insert("end", "CPU Usage: {}\n".format(p.cpu_percent()))
示例说明
我们可以使用以上代码创建一个小型的任务管理器程序。在程序中,我们每隔5秒自动刷新进程列表,并当用户选择某个进程时,展示该进程的详细信息。
完整示例代码如下:
import tkinter as tk
from tkinter import ttk
import psutil
class Taskmgr(tk.Frame):
def __init__(self, master=None, **kwargs):
tk.Frame.__init__(self, master, **kwargs)
#左侧窗口:进程列表
self.procTable = ttk.Treeview(self)
self.procTable["columns"]=("pid","name","status")
self.procTable.column("pid", width=50)
self.procTable.column("name", width=200)
self.procTable.column("status", width=100)
self.procTable.heading("pid", text="PID")
self.procTable.heading("name", text="Name")
self.procTable.heading("status", text="Status")
#右侧窗口:进程详情
self.procDetail = tk.Text(self, width=80)
#设置控件尺寸和布局
self.procTable.grid(row=0, column=0, sticky="nsew")
self.procDetail.grid(row=0, column=1, sticky="nsew")
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(1, weight=1)
#绑定事件响应函数
self.procTable.bind("<Button-1>", self.showProcDetail)
def updateProcList(self):
#清空表格
for item in self.procTable.get_children():
self.procTable.delete(item)
#插入新的进程信息
for pid in psutil.pids():
p = psutil.Process(pid)
self.procTable.insert("", "end", values=(p.pid, p.name(), p.status()))
def start(self):
self.updateProcList()
self.after(5000, self.start) #每隔5秒自动刷新列表
def showProcDetail(self, event):
#获取当前选中的进程pid
procPid = self.procTable.item(self.procTable.focus())["values"][0]
#获取该进程的信息并展示在右侧窗口中
p = psutil.Process(procPid)
self.procDetail.delete(1.0, "end")
self.procDetail.insert("end", "PID: {}\n".format(p.pid))
self.procDetail.insert("end", "Name: {}\n".format(p.name()))
self.procDetail.insert("end", "Status: {}\n".format(p.status()))
self.procDetail.insert("end", "CPU Usage: {}\n".format(p.cpu_percent()))
if __name__ == "__main__":
root = tk.Tk()
root.title("Task Manager")
taskmgr = Taskmgr(root)
taskmgr.pack(fill="both", expand=True)
taskmgr.start()
root.mainloop()
当运行以上代码时,会弹出一个任务管理器窗口,窗口中左侧为进程列表,右侧为进程详情。用户可以选择某个进程后,在右侧窗口中查看该进程的详细信息。窗口每隔5秒自动更新进程列表,以反映系统当前的进程运行状况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux操作系统利用python实现任务管理器可视化功能 - Python技术站