用Python高仿一个任务管理器

1. 任务管理器的介绍

任务管理器是操作系统提供的一种常见的系统监视工具,可以用来管理和监视正在运行的程序。在Windows系统中,任务管理器可以展示正在运行的应用程序、进程和服务等相关的信息。为了更好地了解任务管理器是如何操作的,我们将使用Python语言高仿一个任务管理器。

2. PySimpleGUI库的使用

2.1 PySimpleGUI库的介绍

在Python中,有许多图形化库可以用于开发GUI应用程序,如Tkinter、PyQt、wxPython等。在这里,我们将使用一个相对简单易用的图形化库PySimpleGUI。

PySimpleGUI是一个Python库,可以帮助开发人员快速构建图形用户界面。它包含了数量庞大的组件和布局选项,使用者只需选择适合自己的组件和布局,即可快速构建一个基本的GUI应用程序。

2.2 PySimpleGUI的安装

要安装PySimpleGUI库,只需使用pip命令即可。打开终端窗口,输入以下命令:

pip install PySimpleGUI

如果需要升级PySimpleGUI到最新版本,可以使用以下命令:

pip install PySimpleGUI --upgrade

3. 任务管理器的实现

3.1 基本框架的设计

我们的任务管理器将分为三个模块:进程模块、服务模块和性能模块。其中,进程模块用于展示正在运行中的进程信息,服务模块用于展示正在运行中的服务信息,性能模块用于展示当前系统的性能信息。

为了使程序更加简洁易懂,我们将使用面向对象的方式设计程序。程序分为三个类ProcessWindow、ServiceWindow和PerformanceWindow。每个类对应一个模块。在模块的类中,我们定义了基本的窗口框架、展示信息的表格以及相关的方法。

3.2 进程模块的实现

进程模块对应的类为ProcessWindow。

在ProcessWindow中,我们定义了一个展示进程信息的表格,表格中包含了进程ID、进程名、进程路径、内存占用等信息。我们使用psutil库获取系统中正在运行的进程信息,并将其添加到表格中。

以下代码是ProcessWindow的基本框架:

import PySimpleGUI as sg

import psutil

class ProcessWindow(object):

def __init__(self):

# 窗口布局

self.layout = [[sg.Table(values=[],

headings=['PID', 'Name', 'Path', 'Memory'],

col_widths=[10, 30, 40, 20],

auto_size_columns=True,

justification='center',

num_rows=20,

key='-TABLE-')]]

self.window = sg.Window('Process', self.layout, finalize=True)

self.table = self.window['-TABLE-']

def update_process_table(self):

# 获取系统中正在运行的进程信息

process_list = []

for process in psutil.process_iter(['pid', 'name', 'exe', 'memory_info']):

pid, name, exe, memory_info = process.info

process_list.append([pid, name, exe, f'{memory_info.rss / 1024 / 1024:.2f}MB'])

# 更新表格信息

self.table.update(values=process_list)

def start(self):

while True:

event, _ = self.window.read(timeout=1000)

if event == sg.WIN_CLOSED:

break

self.update_process_table()

self.window.close()

在代码中,我们使用psutil库获取系统中正在运行的进程信息,并将其添加到表格中。使用update_process_table()函数更新表格信息,使用start()函数启动窗口。

3.3 服务模块的实现

服务模块对应的类为ServiceWindow。

在ServiceWindow中,我们同样定义了一个展示服务信息的表格,表格中包含了服务名称、服务状态、服务类型、服务路径等信息。我们使用win32service库获取系统中正在运行的服务信息,并将其添加到表格中。

以下代码是ServiceWindow的基本框架:

import PySimpleGUI as sg

import win32serviceutil

import win32service

class ServiceWindow(object):

def __init__(self):

# 窗口布局

self.layout = [[sg.Table(values=[],

headings=['Name', 'Status', 'Type', 'Path'],

col_widths=[20, 10, 15, 40],

auto_size_columns=True,

justification='center',

num_rows=20,

key='-TABLE-')]]

self.window = sg.Window('Service', self.layout, finalize=True)

self.table = self.window['-TABLE-']

def update_service_table(self):

# 获取系统中正在运行的服务信息

service_list = []

try:

status_map = {win32service.SERVICE_STOPPED: 'Stopped',

win32service.SERVICE_RUNNING: 'Running'}

for service in win32serviceutil.EnumServicesStatus():

name = service[0]

status = status_map[service[1]]

service_type = win32serviceutil.GetServiceType(name)

service_path = win32serviceutil.GetServicePath(name)

service_list.append([name, status, service_type, service_path])

except:

pass

# 更新表格信息

self.table.update(values=service_list)

def start(self):

while True:

event, _ = self.window.read(timeout=1000)

if event == sg.WIN_CLOSED:

break

self.update_service_table()

self.window.close()

3.4 性能模块的实现

性能模块对应的类为PerformanceWindow。

在PerformanceWindow中,我们使用psutil库获取当前系统的CPU、内存、磁盘、网络等信息,并将其添加到表格中。

以下代码是PerformanceWindow的基本框架:

import PySimpleGUI as sg

import psutil

class PerformanceWindow(object):

def __init__(self):

# 窗口布局

self.layout = [[sg.Table(values=[],

headings=['Type', 'Value'],

col_widths=[15, 15],

auto_size_columns=True,

justification='center',

num_rows=4,

key='-TABLE-')]]

self.window = sg.Window('Performance', self.layout, finalize=True)

self.table = self.window['-TABLE-']

def update_performance_table(self):

# 获取当前系统的CPU、内存、磁盘、网络等信息

cpu_usage = f'{psutil.cpu_percent(interval=1)}%'

memory_usage = f'{psutil.virtual_memory().percent}%'

disk_usage = f'{psutil.disk_usage("/").percent}%'

network_io = psutil.net_io_counters()

sent = network_io.bytes_sent / 1024 / 1024

received = network_io.bytes_recv / 1024 / 1024

# 更新表格信息

self.table.update(values=[['CPU Usage', cpu_usage],

['Memory Usage', memory_usage],

['Disk Usage', disk_usage],

['Network IO', f'Sent: {sent:.2f}MB, Received: {received:.2f}MB']])

def start(self):

while True:

event, _ = self.window.read(timeout=1000)

if event == sg.WIN_CLOSED:

break

self.update_performance_table()

self.window.close()

4. 程序的启动

在程序启动时,我们需要将三个模块的窗口都打开。为了方便用户使用,我们使用PySimpleGUI库的Tabbed窗口进行布局。

以下代码是程序的启动代码:

import PySimpleGUI as sg

from process_window import ProcessWindow

from service_window import ServiceWindow

from performance_window import PerformanceWindow

if __name__ == '__main__':

process_window = ProcessWindow()

service_window = ServiceWindow()

performance_window = PerformanceWindow()

tab_group_layout = [[sg.Tab('Process', process_window.layout)],

[sg.Tab('Service', service_window.layout)],

[sg.Tab('Performance', performance_window.layout)]]

layout = [[sg.TabGroup(tab_group_layout)]]

window = sg.Window('Task Manager', layout)

process_window.start()

service_window.start()

performance_window.start()

window.close()

5. 总结

通过使用PySimpleGUI库和psutil库,我们实现了一个简单的任务管理器。该任务管理器可以展示系统中正在运行的进程和服务信息,以及当前系统的CPU、内存、磁盘、网络等性能指标。

该任务管理器的设计思路可以帮助开发人员更好地了解如何使用Python语言实现一个GUI应用程序,同时也展示了如何使用Python语言获取系统信息并展示在图形界面中。

后端开发标签