📜  PyQt5 – 获取 IP 地址的 GUI 应用程序(1)

📅  最后修改于: 2023-12-03 15:04:00.580000             🧑  作者: Mango

PyQt5 – 获取 IP 地址的 GUI 应用程序

本文介绍了一个使用 PyQt5 编写的 GUI 应用程序,可以用于获取当前计算机的 IP 地址。本应用程序使用了 Qt 中的 QNetworkInterface 类,可以方便地获取所有网络接口的 IP 地址信息。同时,本应用程序也演示了如何使用 PyQt5 中的 QListView 控件来展示 IP 地址列表。

程序设计

首先,我们需要导入需要的 PyQt5 组件以及 Python 标准库中的 sys、socket 以及 threading 模块。其中,QApplication、QWidget 和 QListView 分别用于创建应用程序、窗口和列表视图。QPushButton 用于创建按钮,QStandardItemModel 用于创建列表视图的数据模型,QNetworkInterface 用于获取网络接口的信息。

import sys
import socket
import threading
from PyQt5.QtWidgets import QApplication, QWidget, QListView, QPushButton
from PyQt5.QtCore import Qt, QStandardItemModel
from PyQt5.QtGui import QStandardItem
from PyQt5.QtNetwork import QNetworkInterface

在主函数中,我们先创建了一个 QWidget 对象作为主窗口,并设置它的标题和大小。然后,创建了一个 QPushButton 对象用于触发获取 IP 地址的事件。这个按钮的事件处理函数为 onGetIPButtonClicked。

def main():
    app = QApplication(sys.argv)

    main_window = QWidget()
    main_window.setWindowTitle('Get IP Address')
    main_window.resize(320, 240)

    get_ip_button = QPushButton('Get IP Address', main_window)
    get_ip_button.move(90, 90)
    get_ip_button.clicked.connect(onGetIPButtonClicked)

    main_window.show()

    sys.exit(app.exec_())

在事件处理函数 onGetIPButtonClicked 中,我们先获取当前计算机的所有网络接口信息,然后对每个接口进行遍历,获取它们的 IP 地址信息。最后,将 IP 地址信息添加到 QStandardItemModel 对象中,并将这个模型赋给 QListView 控件进行展示。

def onGetIPButtonClicked():

    # 获取网络接口信息
    interfaces = QNetworkInterface.allInterfaces()

    # 创建数据模型
    model = QStandardItemModel()

    # 遍历每个网络接口
    for interface in interfaces:

        # 只获取 IPv4 的网络接口
        if interface.flags() & QNetworkInterface.IsIPv4:

            # 获取 IP 地址列表
            addresses = interface.addressEntries()
            for address in addresses:
                ip = address.ip().toString()

                # 添加 IP 地址到数据模型
                item = QStandardItem(ip)
                model.appendRow(item)

    # 创建列表视图并展示数据
    list_view = QListView()
    list_view.setModel(model)
    list_view.show()

在程序最后,我们使用 QApplication 和 main 函数来启动应用程序。

if __name__ == '__main__':
    main()
结论

本文介绍了一个使用 PyQt5 编写的获取 IP 地址的 GUI 应用程序,通过使用 QNetworkInterface 类获取网络接口的信息,并使用 QStandardItemModel 和 QListView 控件来展示 IP 地址列表。这个应用程序可以方便地获取当前计算机的 IP 地址,同时也演示了 PyQt5 中的一些常用组件的使用方法。