PyQt6: 多网卡适配器的选择与显示(GPT4帮写)
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安装及使用(安装测试+实例演示)