APP下载

基于Python Tkinter课堂手机监管系统的设计

2019-05-10张喜红王玉香

中州大学学报 2019年2期
关键词:控件列表路由器

张喜红,王玉香

(亳州职业技术学院 电子与电气工程系,安徽 亳州 236800)

移动互联网时代的快速到来,使得智能手机与人形影不离。高校大学生群体中几乎人手一部智能手机,已成为他们进行人际交往、信息获取、休闲娱乐、生活购物等活动的得力工具。智能手机给学生生活带来了积极意义的同时,也对大学课堂产生了巨大的负面影响,成为当前课堂的“隐形杀手”之一,学生在上课聊QQ,看网络小说、打游戏的行为极其普遍,隐形逃课之风日趋高涨。有些学校为了制止这些不良行为,采取上课之前强制收缴手机等措施。然而,在大力推行“智慧课堂”的时代下,采用如此霸道的监管方式显得不尽人意,如:学生在课堂上可能需要应用智能手机进行检索文献、共享资源等学习行为[1-3]。由此可见,探索一套有效的监管方式,使智能手机由课堂“隐形杀手”变为“课堂助手”,极具意义。

基于上述背景,以亳州职业技术学院现有多媒体教室的硬件资源为基础,兼顾课堂“蓝墨云”班课的使用,基于Python语言设计了一款课堂手机辅助管理系统,建立了通过无线路由局域网对学生手机终端行为的监管、考评、激励机制,同时实现了教师按需控制局域网接入Internet网络。

1 系统的组成及工作流程

系统的整体组成结构如图1所示,由教师电脑终端、无线路由器、学生智能手机终端组成。无线路由器WLAN端口接入Internet网络,教师电脑通过有线或无线方式接入无线路由器,学生智能手机终端通过Wifi连接到无线路由器,组建班级局域网。系统设计的基本思路是:智能手机同一时段内只能选择WLAN或数据流量访问Internet网络,即学生手机加入班级局域网指定的Wifi无线路由器后,只能通过此无线路由访问Internet互联网,要想通过其他网络或数据流量访问Internet互联网,必须先断开与班级局域网的连接。同时,学生智能手机网卡的MAC地址具全球唯一性,无线路由器的管理页面大多给出了当前接入设备的MAC地址信息列表。因此,在事先建立班级成员手机MAC地址统计信息表的基础上,通过扫描无线路由器接入设备的MAC地址信息列表,便可实时监控学生手机与班级局域网的连接状态,进而及时把握学生的行为动向。

具体实施流程如下:

①课前教师事先统计班级学生姓名或学号与其手机MAC地址的对应信息表。

②上课时,要求班级成员通过密钥接入指定的无线路由,与教师电脑组建局域网。

③教师电脑端通过课堂手机辅助管理系统软件,按1min时间间隔,周期性自动提取接入无线路由器的学生手机MAC地址列表信息,并与步骤①中的MAC地址信息表进行比对,统计每位学生在一个课时内连入指定无线路由网的次数。

④课程结束后,将步骤③中得到的每课时连网次数直观展示,并按一定的比例纳入平时成绩考评体系,进而激励学生课堂规范上网。

⑤当教师需要使用“蓝墨云”等Internet互联网软件与学生开展互动教学时,教师可通过课堂手机辅助管理系统软件实时开启与Internet互联网的连接。同时,为了防止学生浏览与课堂无关的Internet互联媒体,互动结束后可实时断开与Internet互联网的连接。

图1 系统组成示意图

2 系统软件的设计与实现

2.1 系统的GUI主界面

鉴于手机监管系统软件的GUI界面不是很复杂,GUI界面设计采用Python语言提供的Tkinter图形界面模块进行设计[4]。课堂手机监管系统的GUI主界面如图2所示,界面主要由文本标签控件、按钮控件及文本输入控件等三类控件构成。各标签控件的作用相对简单,用于显示软件的使用步骤说明。“路径选择”按钮用于选择设置班级学生智能手机MAC地址信息统计表;“启动监控”与“停止监控”按钮用于启动或停止系统扫描并统计学生智能手机接入无线路由网的次数;“查看结果”按钮用于课堂结束后,向学生展示在线次数的统计结果;“连接网络”与“断开网络”按钮用于教师实时控制无线路由网络接入与断开Internet互联网。

使用Tkinter进行GUI界面开发,主要包括窗口实例化、控件定义、控件属性设置及控件布局等步骤。窗口的实例化通过Tk()类实现,如master = Tk()即可创建一个名为self. master的窗口容器。当窗口创建好后,可在窗口中使用title0 = Label(master, text='请按如下说明使用本软件', font='20', bg='white', fg='blue')格式语句添加文本标签控件,第一项参数用于指定控件的容器为master窗口容器,其他参数分别为显示的文本内容、字体大小、背景色、文字颜色。按钮控件可使用link_internet = Button(master, text='停止监控', command= open_internet)格式语句添加,第一项参数同样也是指定控件的容器,text参数为按钮显示的文本内容,command参数是按钮的事件命令,open_internet为自定义的按钮功能函数。各控件在容器如何布局,通过Tkinter提供的pack()、grid()两种方法实现:pack()用于实现控件自上到下的布局;grid()用于实现在子容器中按表格布局。如:link_internet.grid(row=0, column=0)可将link_internet控件布局到当前容器0行、0列的位置。

图2 GUI界面图

2.2 路由器的自动化管理

课堂手机监管系统软件获取当前接入无线路由器设备的Mac地址列表,或管理Internet互联网的接入或断开,都需模拟浏览器通过HTTP请求访问路由器的各个管理页面。requests或selenium模块是Python实现HTTP请求常用方法[5-6]。requests对静态交互网页的请求与获取实现较为简单,但对于动态网页需进行抓包分析后设计请求方式,实现相对困难。Selenium是一款用于Web自动化测试的工具包,它提供的webdriver工具可模拟人工操控浏览器请求网页,结合无界面的PhantomJS浏览器,可实现自动化请求网页[7]。经实际测试,鉴于通过requests请求无线路由器的URL地址返回为空,最终决定采用Selenium与PhantomJS模拟人工操作本地浏览器的方式,实现无线路由器的无界面控制管理。以登录无线路由器管理后台为例,其关键代码如下所示:

from selenium import webdriver

import time

password = '填入你自己的密码'

Routers_URL= 'http://192.168.11.1/'

My_driver = webdriver.PhantomJS(executable_path=r'F:phantomjsinphantomjs.exe')

My_driver.get(Routers_URL)#模拟请求路由器管理后台登录页面

time.sleep(1)#等待响应近回所需的时间

My_driver.find_element_by_id('pcPassword').send_keys(password) #模拟在密码栏输入登陆密码

My_driver.find_element_by_id('logIn').click()#模拟单击登陆按钮事件

其中My_driver = webdriver.PhantomJS(executable_path=r'F:phantomjsinphantomjs.exe')语句用于指定无界面浏览器PhantomJS的驱动程序安装路径;find_element_by_id('pcPassword')语句用于从网页中定位光标到指定的位置;send_keys(password)用于向指定的位置填写相应的内容;click()用于模拟鼠标单击指定位置的操作;time.sleep(1)用于实现休眠等待1s,具体时长需依据网页返回的响应速度决定。

2.3 MAC信息列表的提取

连入无线路由器MAC地址列表信息的提取过程,可通过如下步骤实现:①通过2.2节中的无界面自动化WEB操控方式,进入到无线路由器的MAC信息列表页面,获得MAC信息列表页网页源码。②从获得的MAC信息列表网页源码中,定位、过滤、提取每个接入设备的MAC信息。MAC信息列表的定位、过滤、提取采用Python的正则表达式实现,关键实现代码如下:

#定位到MAC地址列表区域,提取所有接入设备MAC地址

R_Mac_List = My_driver.find_element_by_id('wanmac')

now_mac_text= R_Mac_List.text#将MAC地址列表信息转化为文本

now_mac=re.findall(r"[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}"

r":[0-9 a-f A-F]{2}:[0-9 a-f A-F]{2}",now_mac_text) #正则表达式匹配

2.4 在线签到次数的统计

去除网络连接存在故障的情况,在单位时间内统计学生手机MAC地址在无线路由网络的存在次数,在一定程度上能够反映学生是否接入其他网络,访问与课堂无关的信息情况。具体的实现方法是:以一定的时间间隔,周期性的将已知学生姓名的手机MAC数据表与当前获得的MAC信息列表进行对比,若当前获得的MAC信息列表中存在某已知学生姓名的手机MAC地址信息,则将此学生的签到次数加1。关键实现代码如下,其中now_mac为当前接入路由器的所有MAC地址;self.student_Mac为事先已知学生姓名的手机MAC地址数组;self.timeCount为签到计数器。

def conect_count(self,now_mac):

for i in range(len(now_mac)):

for j in range(len(self.timeCount)):

if now_mac[j] == self.student_Mac[j]:

self.timeCount[j] = self.timeCount[j] + 1;

else:

continue

2.5 在线次数统计结果的展示

为了及时将签到次数以直观的形式呈现给学生,对学生课堂规范使用手机起到激励、警示作用,课堂教学结束时,需点击图2所示GUI主界面上的“查看结果”按钮,展示本堂课学生的在线次数。与“查看结果”按钮对应的结果展示功能函数,采用Python语言提供的matplotlib绘图工具包实现[8],结果展示方式采用柱状图模式,具体实现代码如下:

def Display_result(self):

try:

plt.figure(u'统计结果')

matplotlib.rcParams['font.family'] = 'SimHei'

matplotlib.rcParams['font.size'] = 10

plt.xlabel(u'学生姓名')

plt.ylabel(u"在线次数")

plt.bar(range(len(self.student_name)),self.timeCount)

plt.xticks(range(len(self.student_name)),self.student_name,rotation=0)

plt.title(u"在线次数统计结果",fontproperties = 'SimHei', fontsize = 20)

plt.show()

except:

messagebox.showinfo('提示', '运行错误!') # 显示对话框

3 测试与分析

教师电脑采用CPU型号为Intel(R) Core(TM) i3-4160 3.6GHz,内存为4GB,操作系统为Win7-64位的宏机台式电脑,无线路由器选用迅捷FW450R,学生人数24名,在12m*7m大小的教室内按图1所示的拓扑结构组建网络,以45min为一课时,测试系统的各项功能。24名受测试学生在线次数统计结果如图3所示,去除网络连接故障因素,可知6,10,16,23,26,17号学生在课中接入班级无线互联网的次数较低,一定程度上客观反映了这些学生在课中有不规范使用手机的行为;其余学生在课中的在线次数达40次以上,去除浏览手机本地媒体的行为,基本上可排除接入其他网络浏览与课堂无关资源的情况。因此,可将此项数据按一定的权重纳入平时成绩的评定体系,激励、警示学生课中规范使用手机。同时,教师通过软件控制班级无线局域网接入Internet互联网的实验结果显示,在点击“连接网络”按钮后,整个班级局域网可在3~5s的时间内实时接入Internet互联网;在点击“断开网络”按钮后,整个班级局域网在1~2s的时间内实时断开与Internet互联网的连接。

图3 学生手机在线次数统计结果柱状图

猜你喜欢

控件列表路由器
买千兆路由器看接口参数
维持生命
路由器每天都要关
路由器每天都要关
学习运用列表法
基于.net的用户定义验证控件的应用分析
扩列吧
关于.net控件数组的探讨
列表画树状图各有所长
2011年《小说月刊》转载列表