当前位置: 首页 > 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.lryc.cn/news/614593.html

相关文章:

  • 初始化完数据库提示缺少server文件的处理方法
  • C 语言链表数据结构
  • 接口为什么要设计出v1和v2
  • 升级的MS9122S USB投屏控制芯片(HD输出)
  • Prometheus 通过读取文件中的配置来监控目标
  • 安科瑞EMS3.0:打造“零碳工厂”的智能能源神经中枢
  • 【Spring Boot 快速入门】八、登录认证(一)基础登录与认证校验
  • 用 “故事 + 价值观” 快速建立 IP 信任感
  • Shell脚本实现自动封禁恶意扫描IP
  • 後端開發技術教學(三) 表單提交、數據處理
  • vscode EIDE 无法编译,提示 “文件名、目录名或卷标语法不正确;
  • WPF 表格中单元格使用下拉框显示枚举属性的一种方式
  • 数据大集网:重构企业贷获客生态的线上获客新范式​
  • Ignite内部事件总线揭秘
  • Android 之 OOM的产生和解决办法
  • K-Means 聚类
  • 嵌入式第二十三课 !!!树结构与排序(时间复杂度)
  • AD布线时,如何设置线宽和线间距?简单
  • OpenAI 时隔多年再开源!GPT-OSS 120B/20B 发布,支持本地部署,消费级 GPU 即可运行
  • 五十六、【Linux系统nginx服务】nginx虚拟主机实现
  • InfluxDB 权限管理与安全加固(一)
  • leetcode热题——有效的括号
  • 安全合规1--实验:ARP欺骗、mac洪水攻击、ICMP攻击、TCP SYN Flood攻击
  • C++AVL树
  • windows自动获取wsl IP,并开启端口转发。
  • 供应链项目中产品的ABC XYZ分类法弊端(十)
  • 常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 RPC
  • [科普] AI加速器架构全景图:从GPU到光计算的算力革命
  • 【0基础3ds Max】主工具栏介绍(上)
  • [链表]142. 环形链表 II