当前位置:首页>python>自制高颜值Python网络查询GUI工具

自制高颜值Python网络查询GUI工具

  • 2026-10-11 08:40:57
自制高颜值Python网络查询GUI工具

自制高颜值Python网络查询GUI工具!一键搞定IP查询、网络故障排查

做电脑运维、日常办公、网络调试的小伙伴,大概率都遇到过这样的难题:电脑网络卡顿、无法联网、局域网连接失败、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界面搭建、系统命令执行逻辑、拓展工具功能开发三大核心模块,逐段讲解代码原理,方便大家理解、修改和二次开发。

模块1:高颜值GUI界面搭建

本工具基于Python内置的tkinter库开发,无需额外安装基础依赖,兼容性极强,支持所有Windows系统。整体界面采用分区设计,分为标题区、网络查询按钮区、工具功能按钮区、状态栏、日志输出区五大板块。

代码中自定义了窗口尺寸、背景配色、字体样式,摒弃了tkinter默认的简陋样式,通过扁平化配色、圆角按钮、纯色背景打造高级简约的视觉效果。同时配置了专属文本标签样式,将IPv4地址设置为绿色加粗高亮、参数标签蓝色加粗,实现关键数据可视化区分。除此之外,搭配滚动条组件,支持海量网络日志上下滑动查看,解决内容溢出问题。

核心设计逻辑:通过Frame框架对按钮进行分区管理,区分查询功能和工具功能,界面层级清晰;新增状态栏实时展示程序运行状态(查询中、完成、失败),让用户实时掌握程序运行进度,规避无响应误解。

模块2:系统网络命令执行核心逻辑

这是整个工具的核心功能模块,依托 subprocess 库调用Windows原生DOS命令,实现网络数据读取。为了解决GUI程序执行耗时命令卡顿闪退的问题,代码引入了多线程threading机制,将所有命令执行操作放在子线程运行,主线程仅负责界面渲染,彻底杜绝界面卡死问题。

工具封装了通用的 run\_cmd 命令执行方法,统一处理命令调用、超时检测、异常捕获。设置15秒命令超时机制,避免网络异常导致程序挂死;同时统一编码为gbk,完美兼容Windows中文命令输出,解决中文乱码问题。

针对不同网络场景,单独封装专属查询方法:WiFi信息查询调用netsh系统命令、有线网络查询过滤以太网专属段落、ping测试默认检测百度连通性、flushdns实现DNS缓存一键刷新。同时自定义日志输出方法,通过正则表达式精准匹配全文IPv4地址,实现自动高亮标注,过滤冗余无效数据。

模块3:实用拓展工具功能实现

除了基础的网络查询功能,工具额外开发了四大实用拓展功能,大幅提升排查效率,也是日常运维最常用的功能:

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入门进阶的核心知识点,非常适合新手练手学习,核心知识点汇总如下:

  1. tkinter GUI开发:掌握窗口初始化、组件布局(Label、Button、Frame、Text)、样式自定义、标签高亮、状态栏绑定等可视化开发技巧

  2. subprocess系统调用:实现Python调用Windows原生DOS命令,掌握命令执行、编码适配、超时捕获、标准输出读取方法

  3. threading多线程:解决GUI程序执行耗时操作卡顿问题,区分主线程UI渲染、子程业务逻辑的开发思维

  4. re正则匹配:通过正则表达式精准匹配IPv4格式字符串,实现关键数据筛选、高亮、提取过滤

  5. 系统剪贴板与文件操作:实现系统剪贴板读写、文件保存弹窗、自定义路径存储

  6. Pillow图像处理:实现窗口精准截图、图片本地保存功能

  7. 异常处理机制:全覆盖捕获超时异常、导入异常、运行异常,提升程序稳定性和容错性

五、工具测试步骤与拓展应用场景

1、详细测试步骤

第一步:确保电脑安装Python环境,打开终端执行 pip install Pillow,安装截图功能依赖库;

第二步:复制完整源码,保存为 network\_gui\.py 文件;

第三步:运行Python文件,自动弹出可视化网络工具窗口;

第四步:依次点击五大查询按钮,测试WiFi、有线网络、IP参数、DNS刷新、ping测速功能,观察状态栏状态变化与IPv4高亮效果;

第五步:测试工具功能,分别尝试复制全部日志、单独复制IP、窗口截图、清空内容,验证所有功能可用性;

第六步:断开网络、禁用网卡,测试程序异常捕获能力,验证程序稳定性。

2、拓展应用场景

  • 个人日常网络排查:解决电脑断网、网速卡顿、DNS解析失败、局域网连接异常等常见问题,无需专业命令知识

  • 运维日常调试:运维人员批量排查局域网设备IP、检测网络连通性、刷新DNS缓存、留存网络故障日志截图

  • 计算机学习实训:适合学生学习Windows网络原理、DOS命令、Python GUI开发,作为课程实训项目

  • 二次开发迭代:可基于本代码拓展端口扫描、网关查询、公网IP查询、网络测速等更多高级功能

  • 局域网设备管理:快速采集本机有效IP地址,用于局域网设备组网、设备绑定、网络权限配置

六、最后总结

这款基于Python开发的网络信息查询GUI工具,完美弥补了Windows原生CMD命令行操作繁琐、可视化差、无快捷工具的短板。代码模块化程度高、可读性强、零秘钥风险,不仅可以作为日常办公、运维排查的实用工具,更是非常优质的Python GUI练手项目。零基础小伙伴可以直接运行使用,开发爱好者可以自由二次迭代,拓展更多实用的网络检测功能。 

最新文章

随机文章