页面tkinter
好的!我帮你写一个用 Python + Tkinter 的简单桌面程序,实现:
显示当前系统所有运行的进程
显示进程对应的网络通信端口(TCP/UDP)
可以选择某个进程,并实现启动和停止(停止即杀死进程)
这个程序会用到两个库:
psutil
:获取系统进程和网络端口信息tkinter
:制作UI界面
准备工作
先安装 psutil
:
pip install psutil
代码示例
import tkinter as tk
from tkinter import ttk, messagebox
import psutil
import subprocess
import os
import sysclass ProcessManager(tk.Tk):def __init__(self):super().__init__()self.title("进程与端口管理器")self.geometry("900x600")# 进程列表表格columns = ("pid", "name", "status", "ports")self.tree = ttk.Treeview(self, columns=columns, show="headings")for col in columns:self.tree.heading(col, text=col)self.tree.column(col, width=200)self.tree.pack(fill=tk.BOTH, expand=True)# 按钮区frame = tk.Frame(self)frame.pack(fill=tk.X)self.refresh_btn = tk.Button(frame, text="刷新列表", command=self.refresh_processes)self.refresh_btn.pack(side=tk.LEFT, padx=5, pady=5)self.kill_btn = tk.Button(frame, text="停止进程", command=self.kill_process)self.kill_btn.pack(side=tk.LEFT, padx=5, pady=5)self.start_btn = tk.Button(frame, text="启动程序", command=self.start_program)self.start_btn.pack(side=tk.LEFT, padx=5, pady=5)# 程序路径输入框(启动程序用)self.entry = tk.Entry(frame, width=50)self.entry.pack(side=tk.LEFT, padx=5)self.entry.insert(0, "请输入可执行程序路径或命令")self.refresh_processes()def refresh_processes(self):self.tree.delete(*self.tree.get_children())for proc in psutil.process_iter(['pid', 'name', 'status']):pid = proc.info['pid']name = proc.info['name']status = proc.info['status']ports = self.get_ports_by_pid(pid)ports_str = ", ".join(ports) if ports else ""self.tree.insert("", tk.END, values=(pid, name, status, ports_str))def get_ports_by_pid(self, pid):ports = []try:connections = psutil.net_connections()for c in connections:if c.pid == pid:laddr = f"{c.laddr.ip}:{c.laddr.port}" if c.laddr else ""raddr = f"{c.raddr.ip}:{c.raddr.port}" if c.raddr else ""proto = "TCP" if c.type == socket.SOCK_STREAM else "UDP"ports.append(f"{proto} {laddr}->{raddr}")except Exception:passreturn portsdef kill_process(self):selected = self.tree.selection()if not selected:messagebox.showwarning("警告", "请先选择一个进程")returnpid = int(self.tree.item(selected[0])['values'][0])try:p = psutil.Process(pid)p.terminate()p.wait(3)messagebox.showinfo("提示", f"进程 {pid} 已停止")self.refresh_processes()except Exception as e:messagebox.showerror("错误", f"停止进程失败: {e}")def start_program(self):cmd = self.entry.get().strip()if not cmd or cmd == "请输入可执行程序路径或命令":messagebox.showwarning("警告", "请输入有效的程序路径或命令")returntry:# 使用subprocess启动程序(不阻塞主线程)if sys.platform.startswith("win"):subprocess.Popen(cmd, shell=True)else:subprocess.Popen(cmd.split())messagebox.showinfo("提示", f"程序启动成功: {cmd}")self.refresh_processes()except Exception as e:messagebox.showerror("错误", f"启动程序失败: {e}")if __name__ == "__main__":import socketapp = ProcessManager()app.mainloop()
功能说明
刷新列表:列出当前所有进程,包括进程ID、名称、状态和对应端口
停止进程:选中某进程后点击,终止该进程(需管理员权限或有权限)
启动程序:输入程序完整路径或命令,点击启动(会在后台运行)
注意
部分系统进程不能杀死,会报错(正常现象)
端口显示需要访问网络连接信息,部分平台需要管理员权限
启动程序时,路径或命令必须有效
Windows 和 Linux 路径格式、命令格式不同,需根据系统调整