PyQt6: 多网卡适配器的选择与显示(GPT4帮写)

news2025/1/12 4:01:49

PyQt6: 多网卡适配器的选择与显示

  • 1. 背景
  • 2. Python获取本机网卡适配器信息
  • 3. PyQT6 UI显示网卡信息
  • 4. PyQT6 后台处理:
    • Button
    • ComboBox
  • 附:GPT Output:
  • 博主热门文章推荐:


(本文部分文案由ChatGPT生成,但代码均是Howie开发并验证通过,放心使用。)

另外,用GPT4生成的代码是调用socket API实现多网卡选择, 一如既往的测试运行报错,我就没在看,在最后面也把GPT output附上了,有兴趣的供参考吧~

1. 背景

在现代网络环境中,我们经常需要同时连接多个网络,例如公司内网和互联网。然而,大多数计算机只有一个默认网卡,这使得同时连接多个网络变得困难。因此,我们需要一种方法来选择使用哪个网卡连接网络。

Python 是一种非常强大的编程语言,可以用来编写网络应用程序。在本文中,我们将介绍如何使用 Python 编程实现多个网卡选择的功能,并通过PyQt6显示出来。


2. Python获取本机网卡适配器信息

这里使用了ifaddr, 是个好用切小巧能解决这类问题的lib

  • https://github.com/pydron/ifaddr

针对PyQt6显示,只需获取名称和获取相应的IP,我封装了两个API:

import ifaddr

def get_ethernet_adaptersList():
    adapters = ifaddr.get_adapters(include_unconfigured=False)
    return [adapter.nice_name for adapter in adapters[0:-1]]


def get_ip_address(interface_name):
    adapters = ifaddr.get_adapters()
    for adapter in adapters:
        if adapter.name == interface_name or adapter.nice_name == interface_name:
            for ip in adapter.ips:
                if ":" not in ip.ip[0]:  # only has ipv4
                    return ip.ip

    return "0.0.0.0"

测试打印获取到的本机网卡Name和IP:

 	ethernetList = get_ethernet_adaptersList()
    print(ethernetList)

    for i in range(len(ethernetList)):
        ip_adapter = get_ip_address(ethernetList[i])
        print(i, ethernetList[i], ip_adapter)

打印结果:

在这里插入图片描述


3. PyQT6 UI显示网卡信息

有了所有网卡的信息,我们就可以选择其中一个来连接网络。显示选择网卡的方法有很多种,例如使用固定的 IP 地址或者根据网络质量来选择。

在本文中,我们使用PyQT6界面作为UI显示:

打开QT Designer,简单做个comboBox 和Button来选择和刷新网卡:

在这里插入图片描述

Object信息:
在这里插入图片描述

接下来常规使用pyuic6 将.ui转成.py后,通过python显示出来:
在这里插入图片描述

在这里插入图片描述

4. PyQT6 后台处理:

Button

先给Button绑定个信号:

self.__ui.button_RefreshEthernet.clicked.connect(self.button_refresh_toggled_handler)

点击Button后,获取 list信息,更新到ComboBox即可:

这里小优化了一下:

  • 将list按名称排了下序
def button_refresh_toggled_handler(self):
    self.__ui.comboBox_EthernetList.clear()
    elist = get_ethernet_adaptersList()
    ethernetList = sorted(elist)
    for x in range(len(ethernetList)):
        print(x, ethernetList[x])
        self.__ui.comboBox_EthernetList.addItem(ethernetList[x])




# 获取hostIP:

```python
def get_host_ip() -> str:

    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(("8.8.8.8", 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

启动运行,点击刷新网卡:
在这里插入图片描述

ComboBox

绑定信号:

 self.__ui.comboBox_EthernetList.activated[int].connect(self.ethernet_list_combobox_handler)

同时在ethernet_list_combobox_handler中,获取所选择的网卡信息和IP:

    def ethernet_list_combobox_handler(self, p_type):
        # self.adapter_select_index = p_type

        adapter_name = self.__ui.comboBox_EthernetList.currentText()

        adapter_ip = get_ip_address(adapter_name)

        print("selected adapter_ip:", adapter_name, adapter_ip)

在这里插入图片描述

Python使用多个网卡连接网络是一项非常重要的功能。我们可以根据实际需求来选择不同的网卡选择方法,以满足不同的应用场景。


附:GPT Output:

在这里插入图片描述
在这里插入图片描述


博主热门文章推荐:

在这里插入图片描述

一篇读懂系列:

  • 一篇读懂无线充电技术(附方案选型及原理分析)
  • 一篇读懂:Android/iOS手机如何通过音频接口(耳机孔)与外设通信
  • 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

LoRa Mesh系列:

  • LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释
  • LoRa学习:信道占用检测原理(CAD)
  • LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)

网络安全系列:

  • ATECC508A芯片开发笔记(一):初识加密芯片
  • SHA/HMAC/AES-CBC/CTR 算法执行效率及RAM消耗 测试结果
  • 常见加密/签名/哈希算法性能比较 (多平台 AES/DES, DH, ECDSA, RSA等)
  • AES加解密效率测试(纯软件AES128/256)–以嵌入式Cortex-M0与M3 平台为例

嵌入式开发系列:

  • 嵌入式学习中较好的练手项目和课题整理(附代码资料、学习视频和嵌入式学习规划)
  • IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等
  • Linux内核编译配置(Menuconfig)、制作文件系统 详细步骤
  • Android底层调用C代码(JNI实现)
  • 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
  • Android/Linux设备有线&无线 双网共存(同时上内、外网)

AI / 机器学习系列:

  • AI: 机器学习必须懂的几个术语:Lable、Feature、Model…
  • AI:卷积神经网络CNN 解决过拟合的方法 (Overcome Overfitting)
  • AI: 什么是机器学习的数据清洗(Data Cleaning)
  • AI: 机器学习的模型是如何训练的?(在试错中学习)
  • 数据可视化:TensorboardX安装及使用(安装测试+实例演示)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企企通:为什么成长型企业,需要SaaS采购管理平台?

根据艾瑞咨询发布的《2022年中国企业级SaaS行业研究报告》,未来三年SaaS行业的增长也将与宏观经济恢复速度相挂钩,在中性预期下,到2024年中国企业级SaaS市场规模将有望达到1201亿元。 由于SaaS和云模式出现,采购角色在慢慢发生了变…

perf record对C++程序耗时进行分析

本节将介绍如何使用perf工具的perf record对C代码进行性能分析,一切操作都是在ubuntu 20下进行。 perf工具安装 由于perf工具和内核版本有关,因此直接安装容易出错,建议直接通过如下指令安装: sudo apt-get install linux-tool…

【Access】Access:SQL 语句汇总

目录 一、SQL 的功能 二、考试重点 三、关系的定义 (1)新建关系 (2)删除关系 四、SQL 的「数据查询」功能 (1)基本结构 ① Select 语句的基本结构 ② Select 子句 ③ Where 子句 ④ 空值的处…

HTB-TheNotebook

HTB-TheNotebook 信息收集80端口JWT攻击 立足www-data -> noahnoah -> root 信息收集 80端口 存在一个登录和注册用户业务。先看看登录业务,在登录中如果我输入不存在的用户就会出现: Login Failed! Reason: User doesn’t exist. 如果是存在的用…

Value for SWIFT_VERSION cannot be empty错误解决

出错: 解决方法: 选择后 重新编译成功

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 42页论文及代码 相关链接 【2023 年第十三届 MathorCup 高校数学建模挑战赛】 B 题 城市轨道交通列车时刻表优化问题 详细建模方案及代码实现 1 题目 列车时刻表优化问题是轨道交通…

​力扣解法汇总1376. 通知所有员工所需的时间

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从…

【五一创作】【笔记】Git|如何将仓库中所有的 commit 合成一个?又名,如何清除所有 git 提交记录?(附 git rebase 机制的简要分析)

在对代码进行开源时,我们往往并不希望代码开发过程中的提交记录被其他人看到,因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上,往往会用 rebase 和 squash 或 reset,不过我尝…

【Unity-UGUI控件全面解析】| Button 按钮组件详解

🎬【Unity-UGUI控件全面解析】| Button 按钮组件详解一、组件介绍二、组件属性面板2.1 Transition 类型三、代码操作组件四、组件常用方法示例4.1 监听点击事件4.2 按钮过度动画示例💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首…

JavaWeb——JavaScript

定义: js引入方式(两种方式) js基础语法 输出语句 变量 var的变量特点1:作用域大,是全局变量 var的变量特点2:可以重复声明 ES6最新增的关键字 数据类型,运算符,流程控制语句 js中也有着类似java的8大基本数据类…

企业级信息系统开发讲课笔记3.3 基于XML配置方式SSM框架西蒙购物网

文章目录 零、本节学习目标一、网站功能需求二、网站设计思路(一)设计模式(二)网站前台(三)网站后台1、用户管理2、类别管理3、商品管理4、订单管理 (四)购物流程图 三、网站运行效果…

Iron Web Scraper 2023.4.13 Crack

Iron Web Scraper 被认为是 C# 的互联网抓取库,它能够让用户和开发者激发和最终的个人浏览行为,以提取文件、内容甚至图片和应用程序。动词作为 .NET 的本机项。IronWebScraper 具有从后台处理礼貌和多线程进程的能力,这使得用户程序很容易简…

FreeRTOS 任务通知

文章目录 一、任务通知简介二、发送任务通知1. 函数 xTaskNotify()2. 函数 xTaskNotifyFromISR()3. 函数 xTaskNotifyGive()4. 函数 vTaskNotifyGiveFromISR()5. 函数 xTaskNotifyAndQuery()6. 函数 xTaskNotifyAndQueryFromISR() 三、任务通知通用发送函数1. 任务级任务通知通…

一、环境搭建

一、创建新的环境空间 conda create -n yanyu python3.7.4 yanyu为新的环境空间名称,可自定义修改 conda activate yanyu 切换一下环境空间 二、安装sklearn并验证 安装相关包 pip install numpy pip install scipy pip install matplotlib pip install sklear…

Python小姿势 - Python面向对象

Python面向对象 Python是一种面向对象的编程语言,它能够把很复杂的事情简单化。面向对象最大的特点就是数据和对数据的操作分离开了。 举个例子,假设你要做一个学生成绩管理系统,在这个系统里,你需要存储每个学生的姓名、年龄、成…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 42页论文及代码 相关信息 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现 1 题目 在银行信用…

【python知识】推导式和生成器

一、说明 Python 推导式,是针对容器对象(列表,字典,集合,元组)的产生方式的语句。它可以从一个数据序列构建另一个新的数据序列的结构体。 Python 支持各种数据结构的推导式: 列表(list)推导式字典(dict)推…

从零开始实现 std::string:让你更深入地了解字符串的本质

文章目录 前言string类 的模拟实现一&#xff0c;搭建框架二&#xff0c;重载输入输出操作符 ‘<<’ ‘>>’1. 重载操作符 ‘<<’2.重载操作符 ‘>>’且看方式一来看方式二 三&#xff0c;实现构造函数方式一方式二 四&#xff0c;实现拷贝构造和重载赋…

TCP之报文格式解析

TCP网络协议是较常用的&#xff0c;也基本上都会接触&#xff0c;那么来简单了解下它吧。TCP 是一种面向连接的、可靠的传输协议&#xff0c;它能够将数据分成一些小块&#xff0c;并通过 Internet 进行传输。在 TCP 中&#xff0c;数据被分割成一些称为 TCP 报文段&#xff08…

JetBrains 公布 WebStorm 2023.2 路线图

JetBrains 已公布了 WebStorm 2023.2 版本的路线图&#xff0c;以便用户可以率先了解到官方的规划以及能够预览一下未来能够用上的新功能。 主要聚焦于以下内容&#xff1a; 稳定的新 UI。这是此版本中的优先事项之一。CSS 嵌套支持。WebStorm 2023.2 计划将添加对 CSS 嵌套功能…