前面写了一个简单的管理电脑创建的WIFI热点的工具,整体比较简单,只是由一个图片,和2个button,还有一个MessageBox组成,这两天又完善了下,主要更新了以下几个方面:
1.使用类来编写代码(由于自己基本还是面向过程思想,有必要学习下类的基本写法)
2.将版本1中的MessageBox改为由ListBox和Scrollbar组成的frame,这样信息可以一直显示在listbox里面。
3.增加了菜单栏,并添加了一些子菜单。
4.程序窗口固定,退出需用户确认。
下面是源代码:
# -*- coding: utf-8 -*-
#author: Cullen
#import the needed module
from Tkinter import *
import tkFont
import tkMessageBox
import os
from PIL import ImageTk, Image
def close_window(window):
"""give prompt when user close the window"""
if tkMessageBox.askyesno("QUIT", "Close the Window(Yes/No)", icon="question"):
window.destroy()
def manage_wifi(how, message_frame):
"""this function will open/close the wifi network accoring the arguments:
how=1(open the network) how=2(close the network),
message_frame(the frame which the message display"""
open_wifi_cmd = "netsh wlan start hostednetwork"
close_wifi_cmd = "netsh wlan stop hostednetwork"
if how == 1:
cmd = open_wifi_cmd
else:
cmd = close_wifi_cmd
result = os.system(cmd)
if result != 0:
if how == 1:
message_frame.listbox_insert("请检查无线网卡是否打开,设置是否正确")
else:
message_frame.listbox_insert("关闭WIFI失败!")
else:
if how == 1:
message_frame.listbox_insert("WIFI已打开")
else:
message_frame.listbox_insert("WIFI已关闭")
class ShowMessageFrame():
"""will create a frame contanis a listbox and scrollbar"""
def __init__(self):
self.frame = Frame()
self.message_ft = tkFont.Font(family="Arial", size=10)
self.scrollbar = Scrollbar(self.frame, orient=VERTICAL)
self.listbox = Listbox(self.frame, bg="grey", selectbackground="blue",
selectmode="extended", font=self.message_ft, width=20)
self.scrollbar.config(command=self.listbox.yview)
self.scrollbar.pack(side=RIGHT, fill=Y)
self.listbox.config(yscrollcommand=self.scrollbar.set)
self.listbox.pack(side=LEFT, fill=BOTH, expand=1)
self.listbox_insert("Welcome to WIFI!")
def listbox_insert(self, args):
self.listbox.insert(END, args)
class MyMenu():
"""Create the Menu for Window"""
message_status = 1
def __init__(self, root):
self.menubar = Menu(root)
self.optionmenu = Menu(self.menubar, tearoff=1)
self.optionmenu.add_command(label='Show Message', command=lambda : self.show_messagebox(root))
self.optionmenu.add_command(label='Hide Message', command=lambda : self.hide_messagebox(root))
self.optionmenu.add_separator()
self.optionmenu.add_command(label='Exit', command=lambda : close_window(root))
self.menubar.add_cascade(label='Options', menu=self.optionmenu)
self.helpmenu = Menu(self.menubar, tearoff=1)
self.helpmenu.add_command(label='About', command=self.show_info)
self.menubar.add_cascade(label='Help', menu=self.helpmenu)
self.frame = ''
def hide_messagebox(self, root):
"""will hide the message listbox and scrollbar"""
if self.message_status == 1:
self.frame = root.grid_slaves(2,0)[0]
root.grid_slaves(2,0)[0].grid_remove()
self.__class__.message_status = 0
def show_messagebox(self, root):
if self.message_status == 0 and self.frame != '':
#print root.grid_slaves(2,0)
self.frame.grid(row=2, columnspan=2, pady=5, sticky=S+N+E+W)
self.__class__.message_status = 1
self.frame = ''
def show_info(self):
"""show the software info"""
tkMessageBox.showinfo("About",
"""
WIFI 热点助手
------------------------------------------
version: 1.0
author: Cullen
Email: wangyiyan402@163.com
------------------------------------------""" )
class MyWindow():
""" create the main window which include the image and two button(bounded the appropriate function"""
def __init__(self):
self.root = Tk()
self.root.title("WIFI热点助手");
self.root.resizable(0,0)
#create menu
my_menu = MyMenu(self.root)
self.root.config(menu=my_menu.menubar)
#font and image
self.button_ft = tkFont.Font(family="Arial", size=10, weight=tkFont.BOLD)
self.image = Image.open("wifi.jpg")
self.bm = ImageTk.PhotoImage(self.image)
self.label = Label(self.root, image=self.bm)
self.label.grid(row=0, columnspan=2)
#create button
self.open_button = Button(self.root, text="OPEN", font=self.button_ft, pady=10,
width=10, borderwidth=2, bg="#F3E9CC", command=lambda : manage_wifi(1, message_frame))
self.open_button.grid(row=1, column=0)
self.close_button = Button(self.root, text="CLOSE", font=self.button_ft, pady=10,
width=10, borderwidth=2, bg="#F3E9CC", command=lambda : manage_wifi(0, message_frame))
self.close_button.grid(row=1, column=1)
#create frame which include listbox and scrollbar
message_frame = ShowMessageFrame()
message_frame.frame.grid(row=2, columnspan=2, pady=5, sticky=S+N+E+W)
#message_frame.frame.grid_forget()
#prompt when user close the window
self.root.protocol('WM_DELETE_WINDOW', lambda : close_window(self.root))
self.root.mainloop()
if __name__ == '__main__':
#main()
my_window = MyWindow()
下面是运行后的结果:
点击open/close按钮会打开或关闭WIFI,并在下面的消息框内输出提示信息,右侧的滚动条可以进行上下移动,如下图所示:
菜单栏里的help会显示一些信息:
Option里的Hide Message会隐藏下面的消息框,而点击Show Message则又会重新显示出来:
而点击Exit子菜单和右上角的关闭图标,都会弹出对话框,让用户进行确认:
下面是源代码,运行环境为python2.7,不足之处请指出,谢谢!