猫史档案馆


【Python作品分享】Wifi【教程贴】

用户:郭若垚0Hv4郭若垚0Hv4查看:0 回复:0 评论:0 创建时间:2021-12-03T21:12:51


【作品展示】

center_image

 

【作品介绍】

可以搜索Wifi

可以连接Wifi

可以断开Wifi

这些功能都有(还有)。

 

【作品源代码】

#encode:utf-8
from tkinter import *
from tkinter import ttk
import pywifi
import time
from tkinter import messagebox as mb
import pyperclip as ppc
from tkinter import simpledialog

class Window:
    def __init__(self,window_name):
        self.window_name = window_name
        self.wifi = pywifi.PyWiFi() #设置Wifi
        self.iface = self.wifi.interfaces()[0] #设置网卡
        self.profile = pywifi.Profile()

        self.netiface = StringVar()
        self.status = StringVar()
        self.reload_netiface()      
        self.reload_status()

        self.sb = Scrollbar(self.window_name) #滚动条
        self.sb.pack(side=RIGHT,fill=Y)
        self.list_wifi = ttk.Treeview(self.window_name,columns=["id","name","signal"],show="headings",yscrollcommand=self.sb.set)
        #self.button_reload = Button(self.window_name,text="刷新",command=self.reload)
        self.label_info = Label(self.window_name,text="如果一下没有刷新出来的话\n就重新刷")
        self.label_status = Label(self.window_name,text="状态:"+self.get_status(self.iface.status()),textvariable=self.status)
        self.label_name = Label(self.window_name,text="网卡:"+self.iface.name(),textvariable=self.netiface)
        self.label_tsh = Label(self.window_name,text="只有网络刷新,不包括刷新状态\n和网卡")
        #Button
        #self.button_disconnect = Button(self.window_name,text="断开连接",command=lambda:self.iface.disconnect())

        self.menu = Menu(self.window_name)
        self.menu_file = Menu(self.menu,tearoff=False)
        self.menu_file_reload = Menu(self.menu_file,tearoff=False)
        self.menu_wifi = Menu(self.menu,tearoff=False)

        self.list_wifi.column("id",width=100,anchor="center")
        self.list_wifi.column("name",width=150,anchor="center")
        self.list_wifi.column("signal",width=100,anchor="center")
        self.list_wifi.heading("id",text="ID")
        self.list_wifi.heading("name",text="名称")
        self.list_wifi.heading("signal",text="强度")

        self.list_wifi.pack()
        self.sb.config(command=self.list_wifi.yview)
        #self.sb.pack(side=RIGHT,fill=Y)
        #self.button_reload.grid()
        self.label_info.pack()
        self.label_status.pack()
        self.label_name.pack()
        #self.button_disconnect.pack()
        self.label_tsh.pack()
        
        self.menu_file_reload.add_command(label="刷新不用等待",command=self.reload)
        self.menu_file_reload.add_command(label="刷新网络等待一秒",command=self.reload_1)
        self.menu_file_reload.add_command(label="刷新网络等待两秒",command=self.reload_2)
        self.menu_file_reload.add_command(label="刷新网卡",command=self.reload_netiface)
        self.menu_file_reload.add_command(label="刷新状态",command=self.reload_status)

        self.menu_wifi.add_command(label="断开连接",command=lambda:self.iface.disconnect())
        self.menu_wifi.add_command(label="连接Wifi",command=self.connect_wifi)
        self.menu_wifi.add_command(label="获取Profile",command=self.get_all_network)

        self.menu_file.add_cascade(label="刷新",menu=self.menu_file_reload)
        self.menu_file.add_separator()
        self.menu_file.add_command(label="退出",command=self.close)
        self.menu.add_cascade(label="文件",menu=self.menu_file)
        self.menu.add_cascade(label="Wifi选项", menu=self.menu_wifi)
        self.window_name.config(menu=self.menu)
        
        self.list_wifi.bind("",self.show)
        self.window_name.protocol("WM_DELETE_WINDOW",self.close)
    def reload(self):
        wifi = []
        x = self.list_wifi.get_children()
        for item in x:
            self.list_wifi.delete(item)
        self.iface.scan()
        e = self.iface.scan_results()
        d = 1
        for item in e:
            if item.ssid in wifi:
                continue
            else:
                self.list_wifi.insert("",END,values=(str(d),item.ssid.encode("raw_unicode_escape").decode("utf-8"),str(100-abs(item.signal))))
                wifi.append(item.ssid)
            d += 1
    def get_all_network(self):
        top = Toplevel(self.window_name)
        sb = Scrollbar(top)
        sb.pack(side=RIGHT,fill=Y)
        wifi = ttk.Treeview(top,columns=["id","name"],show="headings",yscrollcommand=sb.set)
        wifi.column("id",width=100,anchor="center")
        wifi.column("name",width=150,anchor="center")
        #wifi.column("key",width=150,anchor="center")
        wifi.heading("id",text="ID")
        wifi.heading("name",text="名称")
        #wifi.heading("key",text="密码")
        wifi.pack()
        sb.config(command=wifi.yview)
        button_reload = Button(top,text="刷新Profile",command=lambda:reload_profile())
        def reload_profile():
            all_network = self.iface.network_profiles()
            wifi_ = []
            x = wifi.get_children()
            for item in x:
                wifi.delete(item)
            for t in all_network:
                wifi.insert("",END,values=(all_network.index(t)+1,t.ssid.encode("raw_unicode_escape").decode("utf-8")))
        reload_profile()    
        button_reload.pack() 
        top.geometry("300x300")
        top.title("Profile查询")
        top.mainloop()       
    def reload_netiface(self):
        self.netiface.set("网卡:"+self.iface.name())
    
    def reload_status(self):
        self.status.set("状态:"+self.get_status(self.iface.status()))  

    def connect_wifi(self):
        top = Toplevel(self.window_name)
        label_ssid = Label(top,text="Wifi名称:")
        entry_ssid = Entry(top)
        label_key = Label(top,text="Wifi密码:")
        entry_key = Entry(top,show="*")
        button_connect = Button(top,text="连接",command=lambda:cot())
        menu = Menu(top)
        self.menu_ctrl = Menu(menu,tearoff=False)
        self.menu_ctrl.add_command(label="粘贴",command=lambda:entry_ssid.insert(END,ppc.paste()))
        def cot(*key):
            self.iface.disconnect()
            self.profile.ssid = entry_ssid.get()
            self.profile.key = entry_key.get()
            self.iface.connect(self.profile)
            time.sleep(2)
            if self.get_status(self.iface.status()) == "CONNECTED":
                mb.showinfo(message="连接成功,\n如果没有连接那么\n等一下",title="好消息")
            else:
                mb.showwarning(message="连接失败",title="坏消息")    

        entry_ssid.bind("",self.copy_ssid)
        entry_key.bind("",cot)

        label_ssid.grid(row=0,column=0)
        entry_ssid.grid(row=0,column=1)
        label_key.grid(row=1,column=0)
        entry_key.grid(row=1,column=1)
        button_connect.grid(row=2,column=0)
        top.title("连接Wifi")
        top.geometry("300x300")
        top.mainloop()   

    def get_status(self,code):
        if code == 0:
            return "DISCONNECTED"
        elif code == 1:
            return "SCANNING"
        elif code == 2:
            return "INACTIVE"
        elif code == 3:
            return "CONNECTING"
        elif code == 4:
            return "CONNECTED"
        else:
            return None    
    def copy_ssid(self,event):
        self.menu_ctrl.post(event.x_root,event.y_root)
    def reload_1(self):
        wifi = []
        x = self.list_wifi.get_children()
        for item in x:
            self.list_wifi.delete(item)
        self.iface.scan()
        time.sleep(1)
        e = self.iface.scan_results()
        d = 1
        for item in e:
            if item.ssid in wifi:
                continue
            else:
                self.list_wifi.insert("",END,values=(str(d),item.ssid.encode("raw_unicode_escape").decode("utf-8"),str(100-abs(item.signal))))
                wifi.append(item.ssid)
            d += 1
    def reload_2(self):
        wifi = []
        x = self.list_wifi.get_children()
        for item in x:
            self.list_wifi.delete(item)
        self.iface.scan()
        time.sleep(2)
        e = self.iface.scan_results()
        d = 1
        for item in e:
            if item.ssid in wifi:
                continue
            else:
                self.list_wifi.insert("",END,values=(str(d),item.ssid.encode("raw_unicode_escape").decode("utf-8"),str(100-abs(item.signal))))
                wifi.append(item.ssid)
            d += 1        
    def show(self,event):
        s = event.widget.selection()
        signal = self.list_wifi.item(s,"values")[2]
        name = self.list_wifi.item(s,"values")[1]
        ID = self.list_wifi.item(s,"values")[0]
        top = Toplevel(self.window_name)
        Label(top,text="名字:%s,ID:%s,强度:%s" % (name,ID,signal)).grid()
        Button(top,text="复制Wifi名称",command=lambda:ppc.copy(name)).grid()
        top.title(name)
        top.geometry("300x300")
        top.mainloop()
    def close(self):
        if mb.askokcancel("退出?","这么好,你确定要退出吗?"):
            self.window_name.destroy()
    def popup(self,event):
        self.filemenu.post(event.x_root,event.y_root)
    def run(self):
        self.reload_1()
        #self.window_name.bind("",self.popup)
        self.window_name.maxsize()
        self.window_name.title("Wifi搜索")
        self.window_name.geometry("500x500")
        self.window_name.mainloop()
if __name__ == "__main__":
    t = Tk()
    if simpledialog.askstring("开始密码","请输入密码") == "qazwsxedc".upper():
        f = Window(t)
        f.run()
    else:
        mb.showerror(title="错误",message="不对!")
        t.destroy()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页