当前位置: 首页 > news >正文

页面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 路径格式、命令格式不同,需根据系统调整


http://www.dtcms.com/a/321771.html

相关文章:

  • CALL与 RET指令及C#抽象函数和虚函数执行过程解析
  • 锂电池保护板测试仪:守护电池安全的核心工具|深圳鑫达能
  • 深度学习里一些常用的指标(备份)
  • 常见数据结构介绍(顺序表,单链表,双链表,单向循环链表,双向循环链表、内核链表、栈、队列、二叉树)
  • 浅析线程池工具类Executors
  • 客户端攻击防御:详解现代浏览器安全措施
  • Python字典高阶操作:高效提取子集的技术与工程实践
  • Socket编程预习
  • js 实现洋葱模型、洋葱反向模型
  • 关于 Rust 异步(无栈协程)的相关疑问
  • Prometheus 监控平台部署与应用
  • 新版速递|ColchisFM突破传统建模局限,用地质统计学模拟构建更真实的地震正演模型
  • 1635. 预算够吗
  • linux运维命令查看cpu、内存、磁盘使用情况
  • FFmpeg 编译安装和静态安装
  • 12、GPIO介绍
  • Redis7集群搭建与原理分析
  • element plus table 表格操作列根据按钮数量自适应宽度
  • 从引导加载程序到sysfs:Linux设备树的完整解析与驱动绑定机制
  • 您与此网站之间建立的连接不安全
  • 智慧园区漏检率↓82%:陌讯多模态融合算法实战解析
  • 防御保护09
  • 【从0到1制作一块STM32开发板】6. PCB布线--信号部分
  • 手机拍照识别中模糊场景准确率↑37%:陌讯动态适配算法实战解析
  • 二、k8s 1.29 之 网络
  • OpenAI 的 GPT-5 来了
  • GO的启动流程(GMP模型/内存)
  • 要写新项目了,运行老Django项目找找记忆先
  • Redis(②-持久化)
  • 写一个redis客户端软件,参考 Another Redis Desktop Manager 的设计风格。