结对人员:王莹&潘学
任务简介:
有了电梯的调度算法和电梯的测试模拟框架, 我们可以从数据层面模拟并测试算法的正确性和效率。 那么现在我们要加上展现的部分 – 用GUI 展现电梯系统从运送所有乘客的过程。 想象一幢大楼全都是透明的, 有许多乘客通过电梯上上下下, 电梯外墙的指示灯 (通常有上/下) 两个标识随着乘客的需求或亮或灭。
下面简要介绍一下整个程序:
界面是利用python的Tkinter搭建的。如下图所示,首先需要获取存储乘客信息和电梯信息的相应的XML文件。
1、主要是利用TK()方法来初始化一个界面。然后设置其相关的属性,控制其样式。
app = Tk()
app.title("电梯调度GUI")
app.geometry('320x640')
Label(app,text="电梯XML文件").pack()
elev = Entry(app)
elev.pack()
Label(app,text="乘客xml文件:").pack()
pg = Entry(app)
pg.pack()
Button(app,text="点击获取上述文件",command = saveinfo,width = 12).pack(pady = 3)
Button(app,text="开始演示",command = run,width = 12).pack(pady = 3)
2.该程序主要利用管道来实现UI和程序之间的额链接。将命令行的输出信息输入到elev.txt文件中,然后UI程序循环获取里面的数据,从而实现了他们之间的链接。
实现总结:
1.环境配置。运行该程序前首先要配置python环境。要求python 3.3.0或其以上版本。并且将该py文件放于工程文件跟目录下。运行调度算法程序,点击运行UI程序。则该UI会显示相应的电梯调度信息。
2.运行实例。
1)电梯XML文件。
<?xml version="1.0" encoding="utf-8" ?>
<elevators
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://tempuri.org/Elevators.xsd">
<elevator id="0" capability="800" floorheight="10" highestfloor="20" initheight="0"/>
<elevator id="1" capability="800" floorheight="10" highestfloor="20" initheight="20"/>
<elevator id="2" capability="1600" floorheight="10" highestfloor="20" initheight="0"/>
<elevator id="3" capability="1200" floorheight="10" highestfloor="20" initheight="20"/>
</elevators>
2)乘客XML文件示例。
<?xml version="1.0" encoding="utf-8" ?>
<passengers
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://tempuri.org/passengers.xsd">
<passenger name="Sen_1" comingtime="148" fromfloor="15" tofloor="12" weight="63" />
<passenger name="Sen_2" comingtime="144" fromfloor="3" tofloor="14" weight="67" />
<passenger name="Sen_3" comingtime="290" fromfloor="17" tofloor="11" weight="62" />
<passenger name="Sen_4" comingtime="273" fromfloor="17" tofloor="1" weight="64" />
<passenger name="Sen_5" comingtime="204" fromfloor="6" tofloor="9" weight="51" />
<passenger name="Sen_6" comingtime="50" fromfloor="12" tofloor="5" weight="57" />
<passenger name="Sen_7" comingtime="67" fromfloor="3" tofloor="13" weight="66" />
<passenger name="Sen_8" comingtime="241" fromfloor="9" tofloor="16" weight="52" />
<passenger name="Sen_9" comingtime="160" fromfloor="3" tofloor="19" weight="66" />
<passenger name="Sen_10" comingtime="27" fromfloor="3" tofloor="16" weight="61" />
<passenger name="Sen_11" comingtime="199" fromfloor="16" tofloor="18" weight="108" />
<passenger name="Sen_12" comingtime="189" fromfloor="15" tofloor="17" weight="100" />
<passenger name="Sen_13" comingtime="271" fromfloor="17" tofloor="13" weight="91" />
<passenger name="Sen_14" comingtime="129" fromfloor="13" tofloor="16" weight="114" />
<passenger name="Sen_15" comingtime="143" fromfloor="1" tofloor="10" weight="85" />
<passenger name="Sen_16" comingtime="156" fromfloor="18" tofloor="2" weight="95" />
<passenger name="Sen_17" comingtime="15" fromfloor="5" tofloor="3" weight="108" />
<passenger name="Sen_18" comingtime="274" fromfloor="4" tofloor="14" weight="96" />
<passenger name="Sen_19" comingtime="156" fromfloor="16" tofloor="12" weight="89" />
<passenger name="Sen_20" comingtime="213" fromfloor="10" tofloor="18" weight="93" />
</passengers>
3)运行完成效果截图