在这篇博客中,我们将探讨如何使用 wxPython 构建一个简单的 Windows 进程管理器应用程序。这个应用程序允许用户列出当前系统上的所有进程,选择和终止进程,并将特定进程保存到文件中以供将来加载。
C:\pythoncode\new\manageprocess.py
全部代码
import wx
import psutil
import os
import signal
class ProcessManager(wx.Frame):
def __init__(self, parent, title):
super(ProcessManager,self).__init__(parent, title=title, size=(800, 500))
self.panel = wx.Panel(self)
self.search_box = wx.TextCtrl(self.panel, style=wx.TE_PROCESS_ENTER)
self.Bind(wx.EVT_TEXT_ENTER, self.OnSearchProcess, self.search_box)
self.btn_list_processes = wx.Button(self.panel, label='List All Processes')
# Create ListView1 with a checkbox column
self.process_listview = wx.ListView(self.panel, style=wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES)
self.process_listview.InsertColumn(0, '', width=40) # Checkbox column
self.process_listview.InsertColumn(1, 'Process Name', width=200)
self.process_listview.InsertColumn(2, 'PID', width=100)
self.process_listview.InsertColumn(3, 'CPU %', width=100)
self.process_listview.InsertColumn(4, 'RAM %', width=100)
self.selected_listview = wx.ListView(self.panel, style=wx.LC_REPORT)
self.selected_listview.InsertColumn(0, 'Process Name', width=200)
self.selected_listview.InsertColumn(1, 'PID', width=100)
self.btn_select_all = wx.Button(self.panel, label='Select All')
self.btn_deselect_all = wx.Button(self.panel, label='Deselect All')
self.btn_add_to_listview2 = wx.Button(self.panel, label='Add to ListView2')
self.btn_kill_processes = wx.Button(self.panel, label='Kill Selected Processes')
self.btn_kill_by_name = wx.Button(self.panel, label='Kill by Name')
self.btn_save = wx.Button(self.panel, label='Save')
self.btn_load = wx.Button(self.panel, label='Load')
self.btn_delete_selected = wx.Button(self.panel, label='Delete Selected')
# Organize layout with BoxSizers
main_sizer = wx.BoxSizer(wx.VERTICAL)
search_sizer = wx.BoxSizer(wx.HORIZONTAL)
listview1_sizer = wx.BoxSizer(wx.VERTICAL)
button_sizer = wx.BoxSizer(wx.HORIZONTAL)
listview2_sizer = wx.BoxSizer(wx.VERTICAL)
search_sizer.Add(self.search_box, 1, wx.EXPAND | wx.ALL, 5)
search_sizer.Add(self.btn_list_processes, 0, wx.EXPAND | wx.ALL, 5)
listview1_sizer.Add(search_sizer, 0, wx.EXPAND | wx.ALL, 5)
listview1_sizer.Add(self.process_listview, 1, wx.EXPAND | wx.ALL, 5)
button_sizer.Add(self.btn_select_all, 0, wx.EXPAND | wx.ALL, 5)
button_sizer.Add(self.btn_deselect_all, 0, wx.EXPAND | wx.ALL, 5)
button_sizer.Add(self.btn_add_to_listview2, 0, wx.EXPAND | wx.ALL, 5)
listview1_sizer.Add(button_sizer, 0, wx.ALIGN_CENTER | wx.ALL, 5)
listview2_sizer.Add(self.selected_listview, 1, wx.EXPAND | wx.ALL, 5)
listview2_sizer.Add(self.btn_kill_processes, 0, wx.EXPAND | wx.ALL, 5)
listview2_sizer.Add(self.btn_kill_by_name, 0, wx.EXPAND | wx.ALL, 5)
listview2_sizer.Add(self.btn_save, 0, wx.EXPAND | wx.ALL, 5)
listview2_sizer.Add(self.btn_load, 0, wx.EXPAND | wx.ALL, 5)
listview2_sizer.Add(self.btn_delete_selected, 0, wx.EXPAND | wx.ALL, 5)
main_sizer.Add(listview1_sizer, 1, wx.EXPAND | wx.ALL, 5)
main_sizer.Add(listview2_sizer, 1, wx.EXPAND | wx.ALL, 5)
self.panel.SetSizer(main_sizer)
self.Bind(wx.EVT_BUTTON, self.OnListProcesses, self.btn_list_processes)
self.Bind(wx.EVT_BUTTON, self.OnKillProcesses, self.btn_kill_processes)
self.Bind(wx.EVT_BUTTON, self.OnKillProcessesByName, self.btn_kill_by_name