def __init__(self, gen, config, preset_dir): # These will be set later (might consider removing them?) self.deviceIP = "" self.devicePort = 0 self.applicationPort = 0 self.config = config self.preset_dir = preset_dir self.generator = gen try: self.__root = Tk() screen_w = self.__root.winfo_screenwidth() screen_h = self.__root.winfo_screenheight() window_w = self.config["window_width"] window_h = self.config["window_height"] off_w = (screen_w - window_w) / 2 off_h = (screen_h - window_h) / 4 # use 4 instead of 2 self.__root.geometry("%dx%d+%d+%d" % (window_w, window_h, off_w, off_h)) # Delete Window callback self.__root.protocol("WM_DELETE_WINDOW", self.exitCallback) self.__window = self.__root self.__root.wm_title("iPhoneComposer") self.__root.option_add("*tearOff", FALSE) # Create menu menubar = Menu(self.__root) preset_handlers = self.makeShowPresetHandlers() self.__root.config(menu=menubar) optionsMenu = Menu(menubar) menubar.add_cascade(label="Options", menu=optionsMenu) optionsMenu.add_command(label="Show internal state", command=self.showInternalState) presetMenu = Menu(menubar) menubar.add_cascade(label="Presets", menu=presetMenu) for i in xrange(12): presetMenu.add_command(label="Show preset %d state" % (i + 1), command=preset_handlers[i]) # Add an output list that may be accessed publicly mainframe = Frame(self.__window, bd=2, relief=SUNKEN, width=500, height=400) # Output frame outputframe = Frame(mainframe, relief=SUNKEN, width=500, height=200) self.outputscrollbar = Scrollbar(outputframe) self.outputscrollbar.pack(side=RIGHT, fill=Y) Label(outputframe, text="Output").pack(side=TOP) self.output = Text(outputframe, bd=0, yscrollcommand=self.outputscrollbar.set) self.output.pack(pady=(10, 10), padx=(10, 10)) self.output.configure(yscrollcommand=self.outputscrollbar.set) self.outputscrollbar.configure(command=self.output.yview) outputframe.pack_propagate(0) outputframe.pack(fill=None, expand=False) # OSC frame oscframe = Frame(mainframe, relief=SUNKEN, width=500, height=200) self.oscScrollbar = Scrollbar(oscframe) self.oscScrollbar.pack(side=RIGHT, fill=Y) Label(oscframe, text="OSC").pack(side=TOP) self.osc = Text(oscframe, bd=0, yscrollcommand=self.oscScrollbar.set) self.osc.pack(pady=(10, 10), padx=(10, 10)) self.osc.configure(yscrollcommand=self.oscScrollbar.set) self.oscScrollbar.configure(command=self.osc.yview) oscframe.pack_propagate(0) oscframe.pack(fill=None, expand=False) mainframe.pack_propagate(0) mainframe.grid(row=1, column=0) # Create the buttons buttonPane = PanedWindow(self.__window, orient=VERTICAL) buttonPane.grid(row=2, column=0) self.__createButtons(buttonPane) buttonPane.pack_propagate(0) # Create the connection fields connectPane = PanedWindow(self.__window, orient=VERTICAL) connectPane.grid(row=3, column=0) self.__createConnect(connectPane) except: t, v, tb = sys.exc_info() traceback.print_exception(t, v, tb) self.__root.quit() quit()