基于PyQt5实现一个无线网连接器

目录
  • 1、准备
  • 2、UI应用
  • 3、业务线程
  • 4、主函数

最近打开电脑wifi连接老是出现各种问题,于是突发奇想,我自己能不能做一个wifi连接的小工具岂不是就没有这些麻烦了,居然成功了。

为了方便不会python的朋友也能够使用,于是我用pyqt5将其做成了界面化的小工具,希望可以帮助到和我有一样困惑的小伙伴。

另外,也可以帮助大家了解到pyqt5 ui的使用过程,最后我将wifi连接小工具打包成了exe的应用程序,大家可以直接下载使用。

1、准备

准备工作就是介绍一下使用到的第三方的非标准库,第一个使用到的就是pywifi模块,
使用这个模块来完成对wifi的控制操作。

不过在运行的过程中遇到了一个问题,就是安装好pywifi模块以后还会提示缺少comtypes,不过没有影响我们将这个库安装就好了。

pip install pywifi -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install comtypes -i https://pypi.tuna.tsinghua.edu.cn/simple

安装好需要的第三方非标准库,将需要的python模块内容导入到我们的代码块中就OK了。

import time

from pywifi import const, PyWiFi, Profile

接下来就是PyQt5模块了,这个模块之前已经使用好多回了,直接使用pip的方式安装。安装好PyQt5模块后,将其导入到python代码块中。

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

from PyQt5.QtCore import *

import sys

import traceback

2、UI应用

要制作wifi无线网连接小工具,需要先将UI界面部分写好,话不多说,我们直接创建一个class来专门编写关于UI界面的部分,开始介绍之前先来看一下我们已经写好的UI界面效果。

wifi连接器主界面.png

class WifiUI(QWidget):
    def __init__(self):
        super(WifiUI, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('wifi 连接器  来源公众号:Python 集中营')
        self.setWindowIcon(QIcon('wifi.png'))
        self.setFixedSize(500, 300)

        self.brower = QTextBrowser()
        self.brower.setFont(QFont('宋体', 8))
        self.brower.setReadOnly(True)
        self.brower.setPlaceholderText('处理进程展示区域...')
        self.brower.ensureCursorVisible()

        self.check_status_btn = QPushButton()
        self.check_status_btn.setText('检查连接状态')
        self.check_status_btn.clicked.connect(self.check_status_btn_click)

        self.wifi_list_btn = QPushButton()
        self.wifi_list_btn.setText('获取wifi列表')
        self.wifi_list_btn.clicked.connect(self.wifi_list_btn_click)

        self.wifi_ssid_in = QLineEdit()
        self.wifi_ssid_in.setPlaceholderText('wifi 名称')

        self.wifi_pwd_in = QLineEdit()
        self.wifi_pwd_in.setPlaceholderText('wifi 密码')

        self.conn_btn = QPushButton()
        self.conn_btn.setText('开始连接wifi')
        self.conn_btn.clicked.connect(self.connect_wifi)

        hbox = QHBoxLayout()
        hbox.addWidget(self.brower)
        vbox = QVBoxLayout()
        vbox.addWidget(self.check_status_btn)
        vbox.addWidget(self.wifi_list_btn)
        vbox.addWidget(self.wifi_ssid_in)
        vbox.addWidget(self.wifi_pwd_in)
        vbox.addStretch(1)
        vbox.addWidget(self.conn_btn)
        hbox.addLayout(vbox)

        self.setLayout(hbox)

        self.wifi_list_thread = WiFiThread()
        self.wifi_list_thread.message.connect(self.show_message)
        self.wifi_list_thread.finished.connect(self.finished_wifilist)

        self.wifi_conn_thread = CoonThread(self)
        self.wifi_conn_thread.message.connect(self.show_message)
        self.wifi_conn_thread.finished.connect(self.finished_conn)

    def finished_wifilist(self, finished):
        if finished is True:
            self.wifi_list_btn.setEnabled(True)
            self.wifi_list_btn.setText('获取wifi列表')

    def finished_conn(self, finished):
        if finished is True:
            self.conn_btn.setEnabled(True)
            self.conn_btn.setText('开始连接wifi')

    def show_message(self, text):
        cursor = self.brower.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.brower.append(text)
        self.brower.setTextCursor(cursor)
        self.brower.ensureCursorVisible()

    def check_status_btn_click(self):
        wifi = PyWiFi()
        interface = wifi.interfaces()[0]

        if interface.status() in [const.IFACE_CONNECTED, const.IFACE_INACTIVE]:
            self.show_message('当前计算机已连接wifi!')
        else:
            self.show_message('当前计算机未连接wifi!')

    def wifi_list_btn_click(self):
        self.wifi_list_btn.setEnabled(False)
        self.wifi_list_btn.setText('正在获取...')
        self.wifi_list_thread.start()

    def connect_wifi(self):
        self.conn_btn.setEnabled(False)
        self.conn_btn.setText('正在连接...')
        self.wifi_conn_thread.start()

3、业务线程

使用PyQt5中的QThread子线程来专门开发业务相关的代码块,实现使用名称、密码连接wifi的功能。然后将该线程加入到UI界面的主线程中单独运行即可。这里将wifi连接和扫描wifi业务分为了两个子线程来做,分别是WiFiThread、CoonThread两个线程。

class WiFiThread(QThread):
    message = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self):
        super(WiFiThread, self).__init__()
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        wifi = PyWiFi()
        interface = wifi.interfaces()[0]

        interface.scan()
        self.message.emit('正在扫描wifi列表...')
        time.sleep(3)
        wifis = interface.scan_results()
        self.message.emit('wifi列表扫描完成!')

        for i in wifis:
            self.message.emit('wifi 名称:{}'.format(i.ssid))
            self.message.emit('wifi 设备mac地址:{}'.format(i.bssid))

        self.finished.emit(True)

class CoonThread(QThread):
    message = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(CoonThread, self).__init__(parent)
        self.working = True
        self.parent = parent

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        try:
            wifi = PyWiFi()
            interface = wifi.interfaces()[0]

            if interface.status() == const.IFACE_CONNECTED:
                interface.disconnect()
                time.sleep(3)

            profile = Profile()  # 配置文件
            profile.ssid = self.parent.wifi_ssid_in.text().strip()  # wifi名称
            self.message.emit('wifi 名称:{}'.format(self.parent.wifi_ssid_in.text().strip()))
            profile.auth = const.AUTH_ALG_OPEN  # 需要密码
            profile.akm.append(const.AKM_TYPE_WPA2PSK)  # 加密类型
            profile.cipher = const.CIPHER_TYPE_CCMP  # 加密单元
            profile.key = self.parent.wifi_pwd_in.text().strip()  # wifi密码
            self.message.emit('wifi 密码:{}'.format(self.parent.wifi_pwd_in.text().strip()))

            interface.remove_all_network_profiles()  # 删除其它配置文件
            tmp_profile = interface.add_network_profile(profile)  # 加载配置文件
            interface.connect(tmp_profile)

            time.sleep(5)

            if interface.status() == const.IFACE_CONNECTED:
                self.message.emit('wifi名称:{}连接成功!'.format(self.parent.wifi_ssid_in.text().strip()))
            else:
                self.message.emit('wifi名称:{}连接失败!'.format(self.parent.wifi_ssid_in.text().strip()))

            time.sleep(1)
            self.finished.emit(True)
        except Exception as e:
            traceback.print_exc()
            self.message.emit('wifi 连接出现异常!')
            self.finished.emit(True)

4、主函数

最后,使用main主函数将整个应用启动即可看到整个页面应用直接使用相应的功能连接wifi。

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = WifiUI()
    main.show()
    sys.exit(app.exec_())

以上代码块部分乃是无线网连接器小工具的全部代码块,不用单独再获取源码。将文章的全部带那块挨个copy到一个.py的python文件中直接运行即可。

到此这篇关于基于PyQt5实现一个无线网连接器的文章就介绍到这了,更多相关PyQt5无线网连接器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用Pyqt5制作屏幕录制界面功能

    目录 应用平台 窗口设置 主体窗口代码 划选窗口代码 总结 最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力.接下准备写使用python如何做屏幕录制工具的系列文章: 录制屏幕制作视频 录制音频 合成视频,音频 基于pyqt5制作可视化窗口 大概上述四个部分,希望自己能够尽快完善,前两篇文章分享了利用opencv制作了屏幕录制部分,利用PyAudio录制音频,本篇文章分享如何使用ffmpeg将同时录制的屏幕录像和音频合成为有声音

  • 基于PyQt5制作一个群发邮件工具

    演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码.因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的. 将UI处理的相关的界面包导入进来 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * # 应用操作相关的库 import sys # 邮件发送相关的库 import smtplib from email.mime.text import M

  • Python爬取破解无线网络wifi密码过程解析

    前言 今天从WiFi连接的原理,再结合代码为大家详细的介绍如何利用python来破解WiFi. Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便.wifi跟我们的生活息息相关,无处不在. 如何连接wifi 首先我们的电脑是如何连接wifi的呢?就拿我们的笔记本电脑来说,我们的笔记本电脑都有无线网卡,如下图所示: 当我们连接WiFi时,无线网卡会自动帮助我们扫描附近的WiFi信号,并且会返回WiFi信号的一些信息,包括了网络的名称(

  • 中秋节老家要贴对联之python无线对联生成器

    目录 导语 正文 总结 导语 ​​ 时逢中秋佳节,古人吟诗对唱.把酒言欢的日子, 佳节加上对联,那就是相得益彰. 普天同庆.花好月圆庆中秋,中秋将至,为营造温馨.和谐的节日氛围 ​ ​ 小编以对对联的形式,表达了对节日的祝福 都有哪些对联呢?让我们一睹为快吧~ ​ ​ 正文 环境安装: Python3.6.Pycharm.requests模块.界面是基于PyQt5.​ ​​ ​ 首先设置对联生成器的界面小标题等. class CoupletGenerator(QWidget): def __in

  • 基于PyQt5制作一个截图翻译工具

    目录 功能介绍 UI 界面 截图 翻译 文字识别 全局热键(快捷键) 托盘管理 主代码 功能介绍 1.翻译功能 2.截图功能(快捷键 + 截图存储到剪切板中) 3.文字识别OCR(基于百度API的文字识别) UI 界面 截图 截图可以使用第三方截图 或 使用PyQt5截图 此文章使用PyQt5的截图 class Snipper(QtWidgets.QWidget): def __init__(self, parent=None, flags=Qt.WindowFlags()): super().

  • 基于PyQt5制作一个表情包下载器

    每次和朋友聊天苦于没有表情包,而别人的表情包似乎是取之不尽.用之不竭.作为一个程序员哪能甘愿认输,于是做了一个表情包下载器供大家斗图. 首先,还是介绍一下设计思路吧,和我们之前做的百度图片下载器2.0一样,使用pyqt5作为UI界面制作的框架,然后就是找一个表情包网站供我们可以下载很多的表情包. 表情包使用的网站是这个,大家也可以使用自己发现的表情包网站做下载. 话不多说,我们先说明一下使用到的python库有哪些. UI界面使用到的pyqt5模块是下面这几个,之前也是一直使用这几个库做UI界面

  • Python 京东云无线宝消息推送功能

    配置文件 注释里面有写,懒得用配置文件了 代码 # 京东云无线路由宝推送 import requests import json import time import hmac import hashlib import base64 import urllib.parse from datetime import datetime # 发送钉钉消息 def sendinfo_ding(token,secret,data): dic=get_timestamp_and_sign_by_secre

  • 基于PyQt5实现一个无线网连接器

    目录 1.准备 2.UI应用 3.业务线程 4.主函数 最近打开电脑wifi连接老是出现各种问题,于是突发奇想,我自己能不能做一个wifi连接的小工具岂不是就没有这些麻烦了,居然成功了. 为了方便不会python的朋友也能够使用,于是我用pyqt5将其做成了界面化的小工具,希望可以帮助到和我有一样困惑的小伙伴. 另外,也可以帮助大家了解到pyqt5 ui的使用过程,最后我将wifi连接小工具打包成了exe的应用程序,大家可以直接下载使用. 1.准备 准备工作就是介绍一下使用到的第三方的非标准库,

  • 基于PyQT5制作一个二维码生成器

    个性化二维码的exe桌面应用的获取方式我放在文章最后面了,注意查收.通过执行打包后的exe应用程序可以直接运行生成个性化二维码. 开始之前先来看一下通过二维码生成器是如何生成个性化二维码的. 其中使用的python包和之前的GUI应用制作使用的模块是一样的. # -*- coding:utf-8 -*- import os import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore im

  • 基于PyQt5制作一个gif动态图片生成器

    这个小工具制作的目的是为了将多张图片组合后生成一张动态的GIF图片.设置界面化的操作,只需要将选中的图片导入最后直接生成动态图片. 导入界面相关的第三方库 from PyQt5.QtWidgets import * from PyQt5.QtGui import * 动态图片处理模块 import imageio 应用操作相关库 import sys import os from datetime import datetime 这是用图片生成器生成的一张GIF图片,大家在生成时尽量选择两张大小

  • 基于PyQt5制作一个windows通知管理器

    前几天看到一个python框架win10toast,它可以用来做windows的消息通知功能.通过设定通知的间隔时间来实现一些事件通知的功能,比如可以可以提醒一头扎进代码编写过程的我们按时喝水. 界面布局采用的依旧是pyqt5的ui设计,使用界面化直接设置好想要提示的内容和时间就可以给我们定时的发通知了. UI相关的部分的还是这几个常用的组件包. from PyQt5.QtGui import * # UI 界面相关 from PyQt5.QtCore import * # 核心组件包 from

  • 基于PyQT5制作一个课堂点名系统

    刷抖音的时候发现一个老师在用的课堂点名系统.用PyQt5实现了一下同款,导入学生姓名,测试了一下完美运行. 操作效果展示: 完整源代码块还是放在了文章的最后面 使用的时候准备好学生姓名的文件,使用导入数据的按钮直接导入就可以开始点名了.新建一个文本文档,将姓名设置设置好,姓名文件示例如下. 使用系统库或者第三方库都比较常规,这里就不一一介绍了. from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore im

  • 基于PyQT5制作一个敏感词检测工具

    设计思路:根据敏感词库文件筛选,查看输入的文本中是否包含敏感词汇.从而过滤出相关的敏感词. 导入应用相关的模块. import os import logging import sys 导入UI界面相关的模块. from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QTextEdit,QGridLayout,QLineEdit,QPushButton,QFileDialog from PyQt5.QtGui import QIc

  • 基于PyQT5制作一个桌面摸鱼工具

    目录 前言 按键功能控制 主要功能 核心代码 前言 现在我能一整天都严肃地盯着屏幕,看起来就像在很认真地工作, 利用摸鱼,打开小说,可实行完美摸鱼,实时保存进度 用PYQT5 Mock一个摸鱼软件 类似于Thief 按键功能控制 q 退出 B 书签功能 F 增加字体大小 Shift F 减小字体 O 打开文件,现在仅仅支持 utf8格式的txt文件 主要功能 FlameLess Window 无边框窗口 一键快速退出 ini 文件读写 右键上下文菜单 核心代码 pyqt 实现功能还是比较顺畅的,

  • 基于PyQt5制作一个动态指针时钟

    想实现这样一个功能,然后pyqt5中又没有现成的组件可以使用,于是就想着只能通过绘图的方式来实现.说到绘图的话,turtle框架无疑是最常见的选择,但其实通过pyqt5的QPainter组件也是可以实现的.而且最后呈现出来的效果还是挺漂亮的. 实现思路:通过使用pyqt5的QPainter组件来绘制好时钟的图表,最后通过定时器不断的改变当前当前时间在图表上面的显示位置.这样最终就实现了一个指针时钟在不断的走动的过程. 和前面的UI应用一样,我们用到的UI相关的组件库还是这三个. from PyQ

  • 基于PyQt5制作一个数据图表生成器

    我的需求:手动配置X轴.Y轴.图表标题等参数自动通过Pyecharts模块生成可视化的html数据图表,并将浏览器图表展示到UI界面上. 制作出图表后的效果展示如下: 另外,生成后的图表结果会使用 html 的形式保存下来. 导入 UI 界面相关的 PyQt5 第三方模块库. from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * 若是使用PyQt5的版本是5.10.1以上,则需要单独安

  • 基于PyQt5制作一个猜数字小游戏

    开始之前,直接来看一下实现后的效果.想自己实现或者需要源码的童鞋直接进场... 将PyQt5的相关模块直接导入即可. from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * 为了照顾一下新关注的童鞋,这里介绍一下PyQt5的安装,还是采用pip的安装方式. pip install PyQt5 将准备好的样式导入到代码块中. # 主题样式模块引用 from QCandyUi import

随机推荐