Package simulation :: Module MainWindow
[hide private]
[frames] | no frames]

Source Code for Module simulation.MainWindow

  1  # -*- coding: utf-8 -*- 
  2   
  3  import Tkinter 
  4   
5 -class MainWindow(object):
6 """Main window of application.""" 7
8 - def __init__(self,system,controllers,processes):
9 self.system = system 10 self.root = Tkinter.Tk() 11 self.root.title("Inverted Pendulum") 12 self.root.minsize(400,200) 13 14 self.controller_nr = Tkinter.IntVar(0) 15 self.controllers = controllers 16 def Controller_Changed(name,index,mode): 17 self.Controller_Changed()
18 self.controller_nr.trace_variable('w',Controller_Changed) 19 20 self.process_nr = Tkinter.IntVar(0) 21 self.processes = processes 22 def Process_Changed(name,index,mode): 23 self.Process_Changed()
24 self.process_nr.trace_variable('w',Process_Changed) 25 26 menubar = Tkinter.Menu(self.root) 27 28 file_menu = Tkinter.Menu(menubar,tearoff=0) 29 file_menu.add_command(label="Quit",underline=0,command=self.File_Quit,accelerator="Ctrl+Q") 30 menubar.add_cascade(label="File",underline=0,menu=file_menu) 31 self.root.bind('<Control-q>',self.File_Quit) 32 33 self.run_menu = Tkinter.Menu(menubar,tearoff=0) 34 self.run_menu.add_command(label="Start", command=self.Run_Start,accelerator="F5") 35 self.run_menu.add_command(label="Step", command=self.Run_Step,accelerator="F11") 36 self.run_menu.add_command(label="Stop", command=self.Run_Stop,accelerator="Shift+F5") 37 menubar.add_cascade(label="Run",underline=0,menu=self.run_menu) 38 self.root.bind('<F5>',self.Run_Start) 39 self.root.bind('<F11>',self.Run_Step) 40 self.root.bind('<Shift-F5>',self.Run_Stop) 41 42 process_menu = Tkinter.Menu(menubar,tearoff=0) 43 process_menu.add_command(label="View",underline=0, command=self.Process_View,accelerator="V") 44 self.root.bind('<v>',self.Process_View) 45 i = 0 46 for process in processes: 47 process_menu.add_separator() 48 process_menu.add_radiobutton(label=process[0],underline=0, variable=self.process_nr,value=i) 49 if process[2]: 50 # needed to save the current value of process 51 def Show(process=process): 52 process[2](process[1]) 53 process_menu.add_command(label="... Parameter",underline=4, command=Show) 54 i = i + 1 55 menubar.add_cascade(label="Process",underline=0,menu=process_menu) 56 57 controller_menu = Tkinter.Menu(menubar,tearoff=0) 58 i = 0 59 for controller in controllers: 60 controller_menu.add_radiobutton(label=controller[0],underline=0, variable=self.controller_nr,value=i) 61 i = i + 1 62 menubar.add_cascade(label="Controller",underline=0,menu=controller_menu) 63 64 65 help_menu = Tkinter.Menu(menubar,tearoff=0) 66 help_menu.add_command(label="About",underline=0, command=self.Help_About,accelerator="F1") 67 menubar.add_cascade(label="Help",underline=0,menu=help_menu) 68 self.root.bind('<F1>',self.Help_About) 69 70 self.controller_nr.set(0) 71 self.process_nr.set(0) 72 73 self.root.config(menu=menubar) 74 75 Tkinter.Label(self.root,text= 76 """ 77 The following keys are defined: 78 79 Ctrl+Q Exit 80 V Show visualization 81 F5 Start simulation 82 Shift+F5 Stop simulation 83 F11 Single step of simulation 84 """,justify=Tkinter.LEFT).pack() 85 86 self.root.mainloop() 87 88 # menu callbacks
89 - def File_Quit(self,event=None):
90 self.root.quit()
91
92 - def Run_Start(self,event=None):
93 self.system.start()
94
95 - def Run_Stop(self,event=None):
96 self.system.stop()
97
98 - def Run_Step(self,event=None):
99 self.system.step()
100
101 - def Process_View(self,event=None):
102 import ProcessView 103 ProcessView.Open(self.system)
104
105 - def Help_About(self,event=None):
106 import About 107 About.Open()
108
109 - def Controller_Changed(self):
110 nr = self.controller_nr.get() 111 print "Set controller %d: %s %s" % (nr,self.controllers[nr][0],self.controllers[nr][1]) 112 self.system.controller = self.controllers[nr][1]
113
114 - def Process_Changed(self):
115 nr = self.process_nr.get() 116 print "Set process %d: %s %s" % (nr,self.processes[nr][0],self.processes[nr][1]) 117 self.system.process = self.processes[nr][1]
118