
做电脑运维、日常办公、网络调试的小伙伴,大概率都遇到过这样的难题:电脑网络卡顿、无法联网、局域网连接失败、DNS解析异常,想要排查故障,只能打开黑乎乎的CMD命令行,手动输入 ipconfig、ping、netsh 等复杂指令。
对于技术新手来说,繁多的命令难以记忆、命令行输出杂乱无章,各类IP地址、网络参数混杂在一起,很难快速抓取有效信息;即便是资深运维人员,频繁手动敲命令、复制数据、截图留存日志,也十分耗费时间,效率极低。同时,原生CMD界面毫无可视化效果,没有高亮标注、没有快捷复制、没有一键截图功能,每次网络排查都繁琐又低效。
为了解决Windows设备网络排查效率低、操作繁琐、可视化差的痛点,今天给大家分享一款纯Python开发、高颜值、功能全覆盖的网络信息查询GUI工具。这款工具基于tkinter搭建可视化界面,整体采用简约高级的浅色系UI,无透明模糊效果,界面干净精致、适配Windows系统,无需安装复杂软件。集成WiFi信息查询、有线网络检测、完整网络参数读取、DNS缓存刷新、网络ping测速五大核心查询功能,同时附带一键复制全部日志、单独提取复制IP、窗口截图、清空数据等实用工具功能,完美覆盖个人办公、运维调试、网络故障排查等绝大多数场景,零基础也能一键操作,彻底告别繁琐的CMD手动命令。
在正式解析代码之前,先带大家快速了解这款GUI工具的核心优势,区别于普通的命令行脚本,它具备极强的实用性和美观性:
可视化极简操作:全部功能按钮化,无需记忆任何DOS命令,点击即可执行网络检测
智能高亮识别:自动识别全文IPv4地址,绿色加粗高亮展示,精准抓取核心网络参数
多线程运行:命令执行独立线程,不会造成GUI界面卡顿、闪退
全套工具赋能:支持日志全量复制、单独复制有效IP、窗口截图存档、一键清空日志
异常容错机制:自带超时检测、异常捕获,命令执行失败自动提示,稳定性极强
界面精致高级:扁平化配色、分区布局清晰、状态栏实时提示运行状态,颜值远超原生CMD
本次工具代码结构清晰、模块化极强,我将整体拆解为GUI界面搭建、系统命令执行逻辑、拓展工具功能开发三大核心模块,逐段讲解代码原理,方便大家理解、修改和二次开发。
本工具基于Python内置的tkinter库开发,无需额外安装基础依赖,兼容性极强,支持所有Windows系统。整体界面采用分区设计,分为标题区、网络查询按钮区、工具功能按钮区、状态栏、日志输出区五大板块。
代码中自定义了窗口尺寸、背景配色、字体样式,摒弃了tkinter默认的简陋样式,通过扁平化配色、圆角按钮、纯色背景打造高级简约的视觉效果。同时配置了专属文本标签样式,将IPv4地址设置为绿色加粗高亮、参数标签蓝色加粗,实现关键数据可视化区分。除此之外,搭配滚动条组件,支持海量网络日志上下滑动查看,解决内容溢出问题。
核心设计逻辑:通过Frame框架对按钮进行分区管理,区分查询功能和工具功能,界面层级清晰;新增状态栏实时展示程序运行状态(查询中、完成、失败),让用户实时掌握程序运行进度,规避无响应误解。
这是整个工具的核心功能模块,依托 subprocess 库调用Windows原生DOS命令,实现网络数据读取。为了解决GUI程序执行耗时命令卡顿闪退的问题,代码引入了多线程threading机制,将所有命令执行操作放在子线程运行,主线程仅负责界面渲染,彻底杜绝界面卡死问题。
工具封装了通用的 run\_cmd 命令执行方法,统一处理命令调用、超时检测、异常捕获。设置15秒命令超时机制,避免网络异常导致程序挂死;同时统一编码为gbk,完美兼容Windows中文命令输出,解决中文乱码问题。
针对不同网络场景,单独封装专属查询方法:WiFi信息查询调用netsh系统命令、有线网络查询过滤以太网专属段落、ping测试默认检测百度连通性、flushdns实现DNS缓存一键刷新。同时自定义日志输出方法,通过正则表达式精准匹配全文IPv4地址,实现自动高亮标注,过滤冗余无效数据。
除了基础的网络查询功能,工具额外开发了四大实用拓展功能,大幅提升排查效率,也是日常运维最常用的功能:
1. 一键复制全部日志:自动读取文本框所有内容,写入系统剪贴板,方便快速存档网络日志;无内容时自动弹窗提示,容错性高。
2. 精准复制有效IP:通过正则匹配所有IPv4地址,自动过滤子网掩码、0.0.0.0等无效IP,一键提取设备有效局域网/公网IP。
3. 窗口截图存档:集成Pillow截图功能,自动获取窗口坐标和尺寸,自定义保存路径,自动生成时间戳命名的截图文件,方便故障日志留存。
4. 一键清空日志:快速清空输出界面,无需重启程序,方便多次测试对比网络数据。
以下为去除所有冗余注释、无密码秘钥、可直接运行的完整源码,复制即可使用:
# -*- coding: utf-8 -*-"""网络信息查询 GUI 工具查询本机 WiFi、有线网络、完整 ipconfig 信息IPv4 地址高亮绿色显示,支持复制和截图"""import reimport subprocessimport threadingimport tkinter as tkfrom tkinter import ttk, scrolledtext, filedialog, messageboxfrom datetime import datetimeclass NetworkInfoApp: def __init__(self, root): self.root = root self.root.title("网络信息查询工具") self.root.geometry("900x620") self.root.configure(bg="#f0f2f5") # 顶部标题 title = tk.Label(root, text="🌐 网络信息查询工具", bg="#f0f2f5", font=("Microsoft YaHei", 16, "bold"), fg="#1a73e8") title.pack(pady=(12, 8)) # 查询按钮区 btn_frame = tk.Frame(root, bg="#f0f2f5") btn_frame.pack(pady=(0, 6)) query_buttons = [ ("📶 WiFi 信息", "#1a73e8", self.query_wifi), ("🔌 有线网络", "#16a34a", self.query_lan), ("📋 ipconfig /all", "#6366f1", self.query_all), ("🔄 刷新DNS", "#f59e0b", self.flush_dns), ("📡 ping 测试", "#dc2626", self.ping_test), ] for text, color, cmd in query_buttons: btn = tk.Button(btn_frame, text=text, command=cmd, bg=color, fg="white", font=("Microsoft YaHei", 9, "bold"), relief="flat", padx=14, pady=4) btn.pack(side="left", padx=4) # 工具按钮区 tool_frame = tk.Frame(root, bg="#f0f2f5") tool_frame.pack(pady=(0, 6)) tool_buttons = [ ("📋 复制全部", "#475569", self.copy_all), ("📋 复制IP", "#0d9488", self.copy_ips), ("📸 截图保存", "#7c3aed", self.screenshot), ("🗑️ 清空", "#94a3b8", self.clear_output), ] for text, color, cmd in tool_buttons: btn = tk.Button(tool_frame, text=text, command=cmd, bg=color, fg="white", font=("Microsoft YaHei", 9), relief="flat", padx=10, pady=3) btn.pack(side="left", padx=4) # 状态栏 self.status_var = tk.StringVar(value="点击按钮查询网络信息") status = tk.Label(root, textvariable=self.status_var, bg="#f0f2f5", fg="#666", font=("Microsoft YaHei", 9)) status.pack(anchor="w", padx=16) # 结果区 self.output = tk.Text(root, font=("Consolas", 12), bg="#ffffff", fg="#1e293b", wrap="word", bd=1, relief="solid", padx=10, pady=8) # 滚动条 scrollbar = ttk.Scrollbar(root, command=self.output.yview) self.output.configure(yscrollcommand=scrollbar.set) scrollbar.pack(side="right", fill="y", padx=(0, 16), pady=(4, 12)) self.output.pack(fill="both", expand=True, padx=(16, 0), pady=(4, 12)) # 配置 IPv4 高亮 tag self.output.tag_configure("ipv4", foreground="#16a34a", font=("Consolas", 14, "bold")) self.output.tag_configure("label", foreground="#1a73e8", font=("Consolas", 12, "bold")) # IPv4 正则 self.ipv4_pattern = re.compile(r'\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b') def log(self, text, clear=True): """输出文本并高亮 IPv4 地址""" if clear: self.output.delete("1.0", "end") lines = text.split("\n") for line in lines: # 查找 IPv4 地址 matches = list(self.ipv4_pattern.finditer(line)) if matches: last_end = 0 for m in matches: # 插入匹配前的普通文本 if m.start() > last_end: self.output.insert("end", line[last_end:m.start()]) # 插入高亮的 IP self.output.insert("end", m.group(), "ipv4") last_end = m.end() # 插入剩余文本 self.output.insert("end", line[last_end:] + "\n") else: self.output.insert("end", line + "\n") self.output.see("end") def run_cmd(self, cmd, label): """在子线程中执行命令""" self.status_var.set(f"⏳ {label}...") def _run(): try: result = subprocess.check_output( cmd, encoding="gbk", errors="replace", timeout=15, stderr=subprocess.STDOUT ) self.root.after(0, lambda: self._show_result(label, result)) except subprocess.TimeoutExpired: self.root.after(0, lambda: self._show_error(label, "命令执行超时")) except Exception as e: self.root.after(0, lambda: self._show_error(label, str(e))) threading.Thread(target=_run, daemon=True).start() def _show_result(self, label, text): self.status_var.set(f"✅ {label} 完成") self.log(text) def _show_error(self, label, error): self.status_var.set(f"❌ {label} 失败") self.log(f"错误: {error}") def query_wifi(self): self.run_cmd(["netsh", "wlan", "show", "interfaces"], "WiFi 信息查询") def query_lan(self): """查询有线网络,过滤以太网段落""" self.status_var.set("⏳ 有线网络查询...") def _run(): try: result = subprocess.check_output( ["ipconfig", "/all"], encoding="gbk", errors="replace", timeout=10 ) sections = result.split("\n\n") lan = [s for s in sections if "以太网" in s or "Ethernet" in s] output = "\n\n".join(lan) if lan else "未找到有线网络适配器\n\n" + result self.root.after(0, lambda: self._show_result("有线网络查询", output)) except Exception as e: self.root.after(0, lambda: self._show_error("有线网络查询", str(e))) threading.Thread(target=_run, daemon=True).start() def query_all(self): self.run_cmd(["ipconfig", "/all"], "ipconfig /all") def flush_dns(self): self.run_cmd(["ipconfig", "/flushdns"], "刷新 DNS 缓存") def ping_test(self): self.run_cmd(["ping", "-n", "4", "www.baidu.com"], "Ping 测试") def copy_all(self): """复制全部内容到剪贴板""" content = self.output.get("1.0", "end").strip() if not content: self.status_var.set("⚠️ 无内容可复制") return self.root.clipboard_clear() self.root.clipboard_append(content) self.status_var.set("✅ 已复制全部内容到剪贴板") def copy_ips(self): """提取并复制所有 IPv4 地址""" content = self.output.get("1.0", "end") ips = self.ipv4_pattern.findall(content) # 过滤掉明显不是有效 IP 的(如 255.255.255.0 子网掩码) valid_ips = [ip for ip in ips if not ip.startswith("255.") and ip != "0.0.0.0"] if not valid_ips: self.status_var.set("⚠️ 未找到有效 IPv4 地址") return ip_text = "\n".join(set(valid_ips)) self.root.clipboard_clear() self.root.clipboard_append(ip_text) self.status_var.set(f"✅ 已复制 {len(set(valid_ips))} 个 IP 地址到剪贴板") def screenshot(self): """截图保存窗口内容""" try: from PIL import ImageGrab except ImportError: messagebox.showwarning("提示", "截图功能需要安装 Pillow:\npip install Pillow") return # 获取窗口位置 x = self.root.winfo_rootx() y = self.root.winfo_rooty() w = self.root.winfo_width() h = self.root.winfo_height() # 保存文件对话框 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") default_name = f"network_info_{timestamp}.png" filepath = filedialog.asksaveasfilename( defaultextension=".png", filetypes=[("PNG 图片", "*.png"), ("所有文件", "*.*")], initialfile=default_name ) if not filepath: return # 截图 img = ImageGrab.grab(bbox=(x, y, x + w, y + h)) img.save(filepath) self.status_var.set(f"✅ 截图已保存: {filepath}") def clear_output(self): """清空输出区""" self.output.delete("1.0", "end") self.status_var.set("已清空")if __name__ == "__main__": root = tk.Tk() app = NetworkInfoApp(root) root.mainloop()这款工具虽然功能全面,但用到的都是Python入门进阶的核心知识点,非常适合新手练手学习,核心知识点汇总如下:
tkinter GUI开发:掌握窗口初始化、组件布局(Label、Button、Frame、Text)、样式自定义、标签高亮、状态栏绑定等可视化开发技巧
subprocess系统调用:实现Python调用Windows原生DOS命令,掌握命令执行、编码适配、超时捕获、标准输出读取方法
threading多线程:解决GUI程序执行耗时操作卡顿问题,区分主线程UI渲染、子程业务逻辑的开发思维
re正则匹配:通过正则表达式精准匹配IPv4格式字符串,实现关键数据筛选、高亮、提取过滤
系统剪贴板与文件操作:实现系统剪贴板读写、文件保存弹窗、自定义路径存储
Pillow图像处理:实现窗口精准截图、图片本地保存功能
异常处理机制:全覆盖捕获超时异常、导入异常、运行异常,提升程序稳定性和容错性
第一步:确保电脑安装Python环境,打开终端执行 pip install Pillow,安装截图功能依赖库;
第二步:复制完整源码,保存为 network\_gui\.py 文件;
第三步:运行Python文件,自动弹出可视化网络工具窗口;
第四步:依次点击五大查询按钮,测试WiFi、有线网络、IP参数、DNS刷新、ping测速功能,观察状态栏状态变化与IPv4高亮效果;
第五步:测试工具功能,分别尝试复制全部日志、单独复制IP、窗口截图、清空内容,验证所有功能可用性;
第六步:断开网络、禁用网卡,测试程序异常捕获能力,验证程序稳定性。
个人日常网络排查:解决电脑断网、网速卡顿、DNS解析失败、局域网连接异常等常见问题,无需专业命令知识
运维日常调试:运维人员批量排查局域网设备IP、检测网络连通性、刷新DNS缓存、留存网络故障日志截图
计算机学习实训:适合学生学习Windows网络原理、DOS命令、Python GUI开发,作为课程实训项目
二次开发迭代:可基于本代码拓展端口扫描、网关查询、公网IP查询、网络测速等更多高级功能
局域网设备管理:快速采集本机有效IP地址,用于局域网设备组网、设备绑定、网络权限配置
这款基于Python开发的网络信息查询GUI工具,完美弥补了Windows原生CMD命令行操作繁琐、可视化差、无快捷工具的短板。代码模块化程度高、可读性强、零秘钥风险,不仅可以作为日常办公、运维排查的实用工具,更是非常优质的Python GUI练手项目。零基础小伙伴可以直接运行使用,开发爱好者可以自由二次迭代,拓展更多实用的网络检测功能。