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语言获取系统信息并展示在图形界面中。