class ihm(Tkinter.Tk): def entrer(): print 'click' self.value.set("bonjour") self.entrer.pack() def __init__(self, parent): Tkinter.Tk.__init__(self, parent) self.parent = parent self.initialize() def initialize(self): #layout manager self.grid() #champ de texte (entrer) self.lframe = LabelFrame(self, text="Nom du noeud", padx=50, pady=20) self.lframe.pack(fill="both", expand="yes") self.lframe.grid(column=0, row=0, sticky='EW') self.value = StringVar() #self.value.set("Noeud") self.entrer = Tkinter.Entry(self.lframe, fg='grey', textvariable=self.value).pack() self.button = Tkinter.Button(self, text="Ok", command=self.entrer) self.button.grid(column=1, row=0) #self.label = Tkinter.Label(self,anchor="center",text = 'Nom du noeud :',fg="black",bg="white") #self.label.grid(column=0,row=0,columnspan=2,sticky='EW') #redimensionnement auto self.grid_columnconfigure(0, weight=1) self.geometry("800x600+300+0")
def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief="raised") self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=10, pady=5) self._right_pane = PanedWindow(self._panes) self._panes.add(self._left_pane, sticky='n') self._panes.add(self._right_pane) self._group_select = GroupSelect(self._left_pane) self._group_select.pack(expand=True, fill='x') # spacer Frame(self._left_pane, height=10).pack() graph_controls = LabelFrame(self._left_pane, text="Graph options", padx=10, pady=5) graph_controls.columnconfigure(1, weight=1) graph_controls.pack(expand=True, fill='x') self._show_graph_checkbutton = CheckBox(graph_controls, text='Show graph') self._show_graph_checkbutton.select() self._show_graph_checkbutton.grid(row=0, columnspan=2, sticky='w') Label(graph_controls, text='Algorithm').grid(row=1, sticky='w') self._graph_type = OptionList(graph_controls, values=MainWindow.GRAPH_TYPES.keys()) self._graph_type.config(width=15) self._graph_type.grid(row=1, column=1, sticky='we') # spacer Frame(self._left_pane, height=10).pack() self._go_button = Button(self._left_pane, text='Go', command=self._go) self._go_button.pack()
class Message(Show_style): def __init__(self, master=None): Show_style.__init__(self, master) self.add_status() self.create_widget() self.pack_all() def create_widget(self): self.create_main_frame() def create_main_frame(self): self.main_labelframe = LabelFrame(self, text='消息中心') self.main_list_item = (('业务编号',10),('客户编号',8),('客户名称',20),('发放日',10),('到期日',10),('贷款金额',5),('产品名称',10),('期限', 5),('利率',8), ('申请状态', 14)) self.main_list = MultiListbox(self.main_labelframe, self.main_list_item, height=22) self.main_list.grid(padx=10, pady=10, row=0, column=0) self.check_button = Button(self.main_labelframe, text='察看') def check_func(): apply_information = self.get_mutilistbox_choose() if not apply_information: MessageBox('当前申请', '请先选中一个申请消息') return self.apply_information_toplevel = ApplyInformationToplevel(self, apply_information) self.check_button['command'] = check_func self.check_button.grid(pady=10, row=1, column=0) def get_mutilistbox_choose(self): now = self.main_list.curselection() if not now: return None else: print 'now', self.main_list.get(now) number = self.main_list.get(now)[0] #return const.apply_information_list[int(now[0])] for apply_information in const.apply_information_list: if apply_information[15] == number: return apply_information def refresh_mutilistbox(self): self.main_list.delete(0, self.main_list.size()) self.add_item() def add_item(self): apply_list = show_apply_list() for p in apply_list: now_state = int(p[-1]) if now_state >= 5: p[-1] = '审核通过' elif now_state > int(const.user_type): p[-1] = '等待上级审核' elif now_state == int(const.user_type): p[-1] = '等待当前用户审核' elif now_state < int(const.user_type): continue self.main_list.insert(Tkinter.END, p) def pack_all(self): self.main_labelframe.pack()
def callHelpdWindow(): textvar='K-TAIL State Transition Software\nVersion:1.0\nAuthor:Lenz L Nerit\University:Victoria University of Wellington\n' helpWind=Toplevel() helpWind.resizable(width=FALSE, height=FALSE) frame=ttk.Frame(helpWind) frm=LabelFrame(frame,text='test') frm.pack() lbl=Label(frm,text="sampleStatus",width=10,bg='blue') lbl.pack(fill=BOTH) helpWind.mainloop()
def wybierajZestawZnakow(zestawieZnakow): gui = Tk() gui.resizable(0, 0) gui.title("") fra1 = LabelFrame(gui, text="Stary zestaw znaków") fra1.pack(padx=2, pady=2) var1 = StringVar() var1.set(zestawieZnakow[0]) opt1 = OptionMenu(fra1, var1, *zestawieZnakow) opt1.pack(fill="x") but1 = Button(fra1, text="Otwieraj plik", command=lambda: gui.destroy()) but1.pack(fill="x", padx=2, pady=2) gui.mainloop() return var1.get()
def specific_frame(gui, link): # TODO: Handle resizing if there is too much information displayed. res = wrap.get_class_grades(link) main_frame = LabelFrame(gui, text=res["class_name"] + " - " + res["current_average"]) for sec in res["sections"]: frame_name = sec["name"] if sec["average"]: frame_name += " - " + sec["average"] temp_frame = LabelFrame(main_frame, text=frame_name, padx=20, pady=5) for i, h in enumerate(sec["grades"]["headers"]): Label(temp_frame, text=h).grid(row=1, column=i) for i, r in enumerate(sec["grades"]["rows"]): for j, c in enumerate(r): Label(temp_frame, text=c).grid(row=i+2, column=j) temp_frame.pack(padx=20, pady=5) main_frame.pack(padx=10, pady=(0, 10))
def overview_frame(gui): def click_link(link): gui.destroy() specific_gui(link) res = wrap.get_student_grades_overview() frame = LabelFrame(gui, text=res["student_name"], padx=20, pady=10) for i, t in enumerate(res["grades"]["headers"]): Label(frame, text=str(t)).grid(row=0, column=i) for i, r in enumerate(res["grades"]["rows"]): for j, c in enumerate(r): if isinstance(c, Link): Button(frame, command=lambda l=c: click_link(l), text=str(c))\ .grid(row=i+1, column=j) elif c: Label(frame, text=str(c)).grid(row=i+1, column=j) frame.pack(padx=10, pady=10) gui.title(res["student_name"])
def displayAxis(self, frame, axis, gmin, gmax, gtot): labels = {'X': 'Width:', 'Y': 'Depth:', 'Z': 'Height:'} f = LabelFrame(frame, text="%s Axis:" % axis) f.pack(fill=X, pady=10, padx=10) l = Label(f, text="Minimum:", width=12, justify=RIGHT) l.grid(row=1, column=1, sticky=E) l = Label(f, text="%8.3f" % gmin, justify=LEFT) l.grid(row=1, column=2) l = Label(f, text="Maximum:", width=12, justify=RIGHT) l.grid(row=2, column=1, sticky=E) l = Label(f, text="%8.3f" % gmax, justify=LEFT) l.grid(row=2, column=2) l = Label(f, text=labels[axis], width=12, justify=RIGHT) l.grid(row=3, column=1, sticky=E) l = Label(f, text="%8.3f" % gtot, justify=LEFT) l.grid(row=3, column=2)
def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised') self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=2, pady=2) self._right_pane = Frame(self._panes) self._panes.add(self._left_pane, width=500) self._panes.add(self._right_pane) # group name group_name_pane = LabelFrame(self._left_pane, text="Group") group_name_pane.pack(fill='x') self._group_name = GroupNameLabel(group_name_pane, self._group) self._group_name.pack(expand=True, fill='both') # group order group_order_pane = LabelFrame(self._left_pane, text="Order") group_order_pane.pack(fill='x') self._group_order = IntegerContainer(group_order_pane, integer=self._group.order()) self._group_order.pack(expand=True, fill='both') # apex self._apex_pane = LabelFrame(self._left_pane, text="Apex") self._apex_pane.pack(expand=True, fill='both') self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex()) self._apex_container.pack(expand=True, fill='both') self._show_graph_button = Button(self._right_pane, text='Show graph', command=self._show_graph_canvas) self._graph_canvas = None if self._show_graph: self._show_graph_canvas() else: self._show_graph_button.pack()
def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised') self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=2, pady=2) self._right_pane = Frame(self._panes) self._panes.add(self._left_pane, width=250) self._panes.add(self._right_pane) # group name group_name_pane = LabelFrame(self._left_pane, text="Group", padx=10, pady=5) group_name_pane.pack(fill='x') self._group_name = GroupNameLabel(group_name_pane, self._group) self._group_name.pack(expand=True, fill='both') # group order group_order_pane = LabelFrame(self._left_pane, text="Order", padx=10, pady=5) group_order_pane.pack(fill='x') self._group_order = IntegerContainer(group_order_pane, integer=self._group.order()) self._group_order.pack(expand=True, fill='both') # apex self._apex_pane = LabelFrame(self._left_pane, text="Apex", padx=10, pady=5) self._apex_pane.pack(expand=True, fill='both') self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex()) self._apex_container.pack(expand=True, fill='both') # graph controls cocliques_frame = LabelFrame(self._left_pane, text="Cocliques", padx=10, pady=5) cocliques_frame.pack(fill='x') self._cocliques_button = Button(cocliques_frame, text="Calculate", command=self._show_cocliques) self._cocliques_button.pack(anchor='nw') self._cocliques_container = ListContainer(cocliques_frame) self._cocliques_list = Listbox(self._cocliques_container) self._cocliques_container.set_listbox(self._cocliques_list) # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw') # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox. self._show_graph_button = Button(self._right_pane, text='Show graph', command=self._show_graph_canvas) self._graph_canvas = None if self._show_graph: self._show_graph_canvas() else: self._show_graph_button.pack()
def resetRaport(): textField.delete(0.0, END) # rysowanie okna mainWindow = Tk() mainWindow.title("Delivery status") mainWindow.resizable(width=False, height=False) mainWindow.lift() inputFrame = Frame(mainWindow, padx=10, pady=10) inputFrame.pack(fill="both") resultFrame = LabelFrame(mainWindow, text=" Raport ", font=("Verdana", 15, "bold"), padx=10, pady=10) resultFrame.pack(pady=5) label0 = Label(inputFrame, text="Wprowadz wartosci:", font=("Vileda", 15, "bold")) label0.grid(row=1, column=0, sticky="W") label1 = Label(inputFrame, text="Ilosc wszystkich TC w spotchecku: ").grid(row=3, column=0, sticky="W") totalTCinput = Entry(inputFrame) totalTCinput.grid(row=3, column=1) label2 = Label(inputFrame, text="Ilosc TC w spotchecku ze statusem Failed:").grid(row=4, column=0, sticky="W") failedTCinput = Entry(inputFrame) failedTCinput.grid(row=4, column=1) label3 = Label(inputFrame, text="Ilosc wszystkich PR/CR w deliverce:").grid(row=5, column=0, sticky="W") totalPRCRinput = Entry(inputFrame) totalPRCRinput.grid(row=5, column=1)
print(indent * level + output) _print_widget_tree_from(child, print_names, print_classes, level + 1, indent) if __name__ == "__main__": try: from Tkinter import Tk, Frame, Label, Button, LabelFrame except ImportError: from tkinter import Tk, Frame, Label, Button, LabelFrame root = Tk() container1 = LabelFrame(root, class_="Container1") container1.pack() left = Frame(container1, name="left") left.pack() Label(left, name="label0").pack() center = Frame(container1, name="center") center.pack() area1 = Frame(center, class_="Area1") area1.pack() area2 = Frame(center, class_="Area2") area2.pack()
def __init__(self, master=None, main=None): Frame.__init__(self, master) self.parent = master self.main = main self.parent.geometry("336x424") self.parent.title(os.getenv("NAME") + " - Board Config") self.master.configure(padx=10, pady=10) self.intvar = IntVar() #Arch self.arch_var = IntVar() lf_arch = LabelFrame(self.parent, text="Architecture") lf_arch.pack(fill=X, expand=True, side=TOP) frame_arch = Frame(lf_arch) frame_arch.pack(fill=X, expand=True, side=TOP) frame_left1 = Frame(frame_arch) frame_left1.pack(expand=True, fill=BOTH, side=LEFT) frame_right1 = Frame(frame_arch) frame_right1.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_arch_8 = Radiobutton(frame_left1, text="8-bit ", anchor="w", width=10, value=8, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_8.pack(fill=X, side=TOP) self.radioButton_arch_32 = Radiobutton(frame_right1, text="32-bit", anchor="w", width=10, value=32, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_32.pack(fill=X, side=TOP) #Mode self.mode_var = StringVar() lf_mode = LabelFrame(self.parent, text="Programming mode") lf_mode.pack(fill=X, expand=True, side=TOP) frame_mode = Frame(lf_mode) frame_mode.pack(fill=X, expand=True, side=TOP) frame_left2 = Frame(frame_mode) frame_left2.pack(expand=True, fill=BOTH, side=LEFT) frame_right2 = Frame(frame_mode) frame_right2.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_mode_icsp = Radiobutton(frame_left2, text="ICSP", anchor="w", width=10, value="icsp", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_icsp.pack(side=TOP, fill=X) self.radioButton_mode_bootloader = Radiobutton( frame_right2, text="Bootloader", anchor="w", width=10, value="bootloader", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_bootloader.pack(side=TOP, fill=X) #Bootloader self.boot_var = StringVar() self.lf_boot = LabelFrame(self.parent, text="Bootloader") self.lf_boot.pack(fill=X, expand=True, side=TOP) frame_boot = Frame(self.lf_boot) frame_boot.pack(fill=X, expand=True, side=TOP) frame_left3 = Frame(frame_boot) frame_left3.pack(expand=True, fill=BOTH, side=LEFT) frame_right3 = Frame(frame_boot) frame_right3.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3, text="v1.x or v2.x", anchor="w", width=10, value="v1_v2", variable=self.boot_var) self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True) self.radioButton_bootloader_v4 = Radiobutton(frame_right3, text="v4.x", anchor="w", width=10, value="v4", variable=self.boot_var) self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True) #Devices 8bit self.dev8_var = StringVar() self.lf_dev8 = LabelFrame(self.parent, text="Devices") self.lf_dev8.pack(fill=X, expand=True, side=TOP) self.frame_8b = Frame(self.lf_dev8) self.frame_8b.pack(fill=X, expand=True, side=TOP) #Devices 32bit self.dev32_var = StringVar() self.lf_dev32 = LabelFrame(self.parent, text="Devices") self.lf_dev32.pack(fill=X, expand=True, side=TOP) self.frame_32b = Frame(self.lf_dev32) self.frame_32b.pack(fill=X, expand=True, side=TOP) frame_buttons = Frame(self.parent) Button(frame_buttons, text="Accept", command=self.accept_config).pack(fill=X, expand=True, side=RIGHT) Button(frame_buttons, text="Cancel", command=self.quit).pack(fill=X, expand=True, side=LEFT) frame_buttons.pack(fill=X, expand=True, side=BOTTOM) frame_advance = Frame(self.parent) self.advanceoptions = Button(frame_advance, text="Advance options", command=self.advance) self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) frame_advance.pack(fill=X, expand=True, side=BOTTOM) frame_warning = Frame(self.parent) self.label_warning = Label(frame_warning, fg="red", text="warning!", anchor="w") self.label_warning.pack(fill=X, expand=True, side=BOTTOM) frame_warning.pack(fill=X, expand=True, side=BOTTOM) self.build_devices_arch() self.load_config() self.init_groups()
hello.pack() frmControl = Frame() frmControl.pack(side=TOP) frmgap = Frame(height=50) frmgap.pack(side=TOP) connState = Tkinter.Label(frmgap,bg='red', width=2) connState.pack() frmOther = Frame() frmOther.pack(side=TOP) #define car controller panel frmCar = LabelFrame(frmControl, text='Car controller') frmCar.pack(side=LEFT) carButtonUp = Tkinter.Button(frmCar,text="up",bg='blue') carButtonUp.bind('<ButtonRelease-1>', popUpMessageBox, "") carButtonUp.pack(side=TOP) carButtonLeft = Tkinter.Button(frmCar,text="left",bg='green') carButtonLeft.bind('<ButtonRelease-1>', popUpMessageBox, "") carButtonLeft.pack(side=LEFT) carButtonRight = Tkinter.Button(frmCar,text="right",bg='blue') carButtonRight.bind('<ButtonRelease-1>', popUpMessageBox, "") carButtonRight.pack(side=RIGHT) carButtonDown = Tkinter.Button(frmCar,text="down",bg='blue')
class Facade(Frame): """This is a Frame that contains group info, group order, apex and prime graph. """ def __init__(self, parent, group, show_graph=True, **kw): Frame.__init__(self, parent, **kw) self._group = group # self._show_apex = True self._show_graph = show_graph self._init_variables() self._init_menu() self._init_components() @property def group(self): return self._group @property def apex_list_container(self): return self._apex_container @property def graph_canvas(self): return self._graph_canvas def _show_graph_canvas(self): self._show_graph_button.forget() # TODO: add different layouts and other options graph = self._group.prime_graph() self._graph_canvas = GraphCanvas(self._right_pane, SpringLayout(graph)) self._graph_canvas.pack(expand=True, fill='both') self._graph_canvas.vertex_label_mode = self.getvar( name=self.winfo_name() + ".vertexlabelposition") self._iterations_plugin = IterationsPlugin() self._iterations_plugin.apply(self._graph_canvas) self.update_layout() def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised') self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=2, pady=2) self._right_pane = Frame(self._panes) self._panes.add(self._left_pane, width=500) self._panes.add(self._right_pane) # group name group_name_pane = LabelFrame(self._left_pane, text="Group") group_name_pane.pack(fill='x') self._group_name = GroupNameLabel(group_name_pane, self._group) self._group_name.pack(expand=True, fill='both') # group order group_order_pane = LabelFrame(self._left_pane, text="Order") group_order_pane.pack(fill='x') self._group_order = IntegerContainer(group_order_pane, integer=self._group.order()) self._group_order.pack(expand=True, fill='both') # apex self._apex_pane = LabelFrame(self._left_pane, text="Apex") self._apex_pane.pack(expand=True, fill='both') self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex()) self._apex_container.pack(expand=True, fill='both') self._show_graph_button = Button(self._right_pane, text='Show graph', command=self._show_graph_canvas) self._graph_canvas = None if self._show_graph: self._show_graph_canvas() else: self._show_graph_button.pack() def _init_variables(self): def set_default_var(self, name): """Sets widget-specific var with same value as root. """ default_var = self.getvar(name) local_var_name = self.winfo_name() + "." + name self.setvar(local_var_name, default_var) return local_var_name local_name = set_default_var(self, "vertexlabelposition") tools.trace_variable(self, local_name, "w", self._change_vertex_label_position) def _change_vertex_label_position(self, name, *arg): # override default value self.setvar("vertexlabelposition", self.getvar(name)) if self._graph_canvas is not None: self._graph_canvas.vertex_label_mode = self.getvar(name) def _init_menu(self): toplevel = self.winfo_toplevel() if toplevel['menu']: self._menu = self.nametowidget(name=toplevel['menu']) else: self._menu = Menu(toplevel) toplevel['menu'] = self._menu graph_options = Menu(self._menu, tearoff=0) self._menu.add_cascade(label="Graph", menu=graph_options) self._menu_index = self._menu.index("end") vertex_label_position = Menu(graph_options, tearoff=0) graph_options.add_cascade(label="Label position", menu=vertex_label_position) vertexlabelposition_var = self.winfo_name() + ".vertexlabelposition" vertex_label_position.add_radiobutton(label="Auto", value="auto", variable=vertexlabelposition_var) vertex_label_position.add_radiobutton(label="Center", value="center", variable=vertexlabelposition_var) graph_options.add_command(label="Save graph...", command=self.call_graph_save_dialog) self.bind("<Destroy>", self.__destroy_menu) #noinspection PyUnusedLocal def __destroy_menu(self, event): try: self._menu.delete(self._menu_index) except TclError: pass def call_graph_save_dialog(self): file_name = tkFileDialog.asksaveasfilename(defaultextension='.ps', filetypes=[('PostScript', '.ps')], parent=self.winfo_toplevel(), title="Save graph as image") if file_name: with codecs.open(file_name, 'w', encoding='utf-8') as file: file.write(self._graph_canvas.postscript()) def update_layout(self): try: self._iterations_plugin.iterate(50) except AttributeError: pass
class MainWindow: def __init__(self): self.root = Tk() self.input_bundle = Bundle() self.stamp_bundle = Bundle() self.controllers = [] self.main_frame = None self.state_label = None self.state_label_var = None self.state_indicator = None self.state_indicator_var = None self.success_button = None self.failed_button = None self.sn_input = None self.title_list = [] self.state_code = Setting.RESULT_OK self.mark = 0 self.listener = MainListener(self) self.context = Context(self.input_bundle, self.stamp_bundle, self.listener) self.main() def main(self): self.initialize() self.context.init_controller(self.controllers) self.state_label_var = StringVar() self.state_indicator_var = StringVar() self.title = u"产线工具" self.label_frame_title = u"产线测试工具客户端" self.root.title(self.title) self.root.geometry("800x260") self.label_frame = LabelFrame(self.root, text=self.label_frame_title) self.label_frame.pack(fill="both", expand="yes") self.main_frame = Frame(self.label_frame) self.main_frame.pack() self.state_label_var.set(u"准备Smt测试") self.state_label = Label( self.main_frame, textvariable=self.state_label_var, font=("Arial", 12), width=40, height=7, bg="#00BFFF" ) self.state_label.pack(side=LEFT) self.state_indicator_var.set(u"未测试") self.state_indicator = Label( self.main_frame, textvariable=self.state_indicator_var, font=("Arial", 12), width=40, height=7, bg="#00BFFF" ) self.state_indicator.pack(side=LEFT) self.control_frame = LabelFrame(self.label_frame) self.control_frame.pack(side=BOTTOM, fill="both", expand="yes") self.success_button = Button( self.control_frame, text=u"成功", font=("Arial", 12), width=15, height=3, command=self.on_success_button ) self.failed_button = Button( self.control_frame, text=u"失败", font=("Arial", 12), width=15, height=3, command=self.on_failed_button ) self.success_button.pack(side=LEFT) self.failed_button.pack(side=RIGHT) self.failed_button["state"] = DISABLED self.sn_input = Entry(self.control_frame, width=50, font=Font(size=42)) self.sn_input.pack() self.disable_buttons() self.sn_input.bind("<KeyRelease-Return>", self.on_sn_input) self.root.resizable(width=False, height=False) if Setting.DEBUG: self.label_text("Debug!!!") def on_sn_input(self, event): self.input_bundle.params[Setting.ID] = self.sn_input.get() print ("sn %s" % self.sn_input.get()) self.start_run() def loop(self): print ("mainloop") self.sn_input.focus() self.root.mainloop() def initialize(self): # _rom_controller = RomController(0, stamp_bundle, listener) # controllers.append(_rom_controller) # title_list.append(u'rom烧写') _sn_controller = SnController(1, self.stamp_bundle, self.listener) self.controllers.append(_sn_controller) self.title_list.append(u"Sn烧录") _adb_controller = AdbController(2, self.stamp_bundle, self.listener) self.controllers.append(_adb_controller) self.title_list.append(u"Smt测试") # _data_controller = DataController(4, stamp_bundle, listener) # controllers.append(_data_controller) # title_list.append(u'数据保存') # _adjust_controller = AdjustController(5, stamp_bundle, listener) # controllers.append(_adjust_controller) # title_list.append(u'wifi校准') # _backup_controller = BackupController(6, stamp_bundle, listener) # controllers.append(_backup_controller) # title_list.append(u'it备份') # _book_set_controller = BookSetController(7, stamp_bundle, listener) # controllers.append(_book_set_controller) # title_list.append(u'预置书籍') # _reset_controller = ResetController(8, stamp_bundle, listener) # controllers.append(_reset_controller) # title_list.append(u'重置系统') # _print_controller = PrintController(9, stamp_bundle, listener) # controllers.append(_print_controller) # title_list.append(u'打印标签') # _weight_controller = WeightController(10, stamp_bundle, listener) # controllers.append(_weight_controller) # title_list.append(u'彩盒称重') def label_normal(self, text=None): self.state_label["background"] = "#00BFFF" self.state_indicator["background"] = "#00BFFF" if text is not None: self.label_failed(str(text)) def label_success(self, text=None): self.state_label["background"] = "#2E8B57" self.state_indicator["background"] = "#2E8B57" if text is not None: self.label_failed(str(text)) def label_failed(self, text=None): self.state_label["background"] = "#DC143C" self.state_indicator["background"] = "#DC143C" if text is not None: self.label_failed(str(text)) def label_text(self, text): self.state_label_var.set(text) self.root.update() def status_text(self, text): self.state_indicator_var.set(text) if text.endswith("Pass"): self.label_success() elif text.endswith("Failed"): self.label_failed() else: self.label_normal() def _start_run(self): print ("Running") self.label_normal() self.context.run() def disable_buttons(self): self.success_button["state"] = DISABLED self.failed_button["state"] = DISABLED def enable_buttons(self): self.success_button["state"] = NORMAL self.failed_button["state"] = NORMAL def start_run(self): print ("wait running") self.disable_buttons() self.root.after(300, self._start_run) def on_failed_button(self): self.disable_buttons() self._retval = self.context.report_failure() if self._retval == Setting.RESULT_FAILED: self.context.clear() self.state_indicator_var.set(u"失败") self.state_label["background"] = "#DC143C" self.state_indicator["background"] = "#DC143C" self.start_run() def on_success_button(self): self.disable_buttons() self.state_label["background"] = "#DC143C" self.state_indicator["background"] = "#DC143C" self.start_run()
class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.pack() # First row f1 = LabelFrame(self, text='NAND file with No$GBA footer', padx=10, pady=10) # NAND Button self.nand_mode = False nand_icon = PhotoImage( data=('R0lGODlhEAAQAIMAAAAAADMzM2ZmZpmZmczMzP///wAAAAAAAAA' 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAYALAAAAAAQAB' 'AAAARG0MhJaxU4Y2sECAEgikE1CAFRhGMwSMJwBsU6frIgnR/bv' 'hTPrWUSDnGw3JGU2xmHrsvyU5xGO8ql6+S0AifPW8kCKpcpEQA7')) self.nand_button = Button(f1, image=nand_icon, command=self.change_mode, state=DISABLED) self.nand_button.image = nand_icon self.nand_button.pack(side='left') self.nand_file = StringVar() Entry(f1, textvariable=self.nand_file, state='readonly', width=40).pack(side='left') Button(f1, text='...', command=self.choose_nand).pack(side='left') f1.pack(padx=10, pady=10, fill=X) # Second row f2 = Frame(self) # Check box self.twilight = IntVar() self.twilight.set(1) self.chk = Checkbutton( f2, text='Install latest TWiLight Menu++ on custom firmware', variable=self.twilight) self.chk.pack(padx=10, anchor=W) # NAND operation frame self.nand_frame = LabelFrame(f2, text='NAND operation', padx=10, pady=10) self.nand_operation = IntVar() self.nand_operation.set(0) Radiobutton(self.nand_frame, text='Uninstall unlaunch or install v1.4 stable', variable=self.nand_operation, value=0, command=lambda: self.enable_entries(False)).pack(anchor=W) Radiobutton(self.nand_frame, text='Remove No$GBA footer', variable=self.nand_operation, value=1, command=lambda: self.enable_entries(False)).pack(anchor=W) Radiobutton(self.nand_frame, text='Add No$GBA footer', variable=self.nand_operation, value=2, command=lambda: self.enable_entries(True)).pack(anchor=W) fl = Frame(self.nand_frame) self.cid_label = Label(fl, text='eMMC CID', state=DISABLED) self.cid_label.pack(anchor=W, padx=(24, 0)) self.cid = StringVar() self.cid_entry = Entry(fl, textvariable=self.cid, width=20, state=DISABLED) self.cid_entry.pack(anchor=W, padx=(24, 0)) fl.pack(side='left') fr = Frame(self.nand_frame) self.console_id_label = Label(fr, text='Console ID', state=DISABLED) self.console_id_label.pack(anchor=W) self.console_id = StringVar() self.console_id_entry = Entry(fr, textvariable=self.console_id, width=20, state=DISABLED) self.console_id_entry.pack(anchor=W) fr.pack(side='right') f2.pack(fill=X) # Third row f3 = Frame(self) self.start_button = Button(f3, text='Start', width=16, command=self.hiya, state=DISABLED) self.start_button.pack(side='left', padx=(0, 5)) Button(f3, text='Quit', command=root.destroy, width=16).pack(side='left', padx=(5, 0)) f3.pack(pady=(10, 20)) self.folders = [] self.files = [] ################################################################################################ def change_mode(self): if (self.nand_mode): self.nand_frame.pack_forget() self.chk.pack(padx=10, anchor=W) self.nand_mode = False else: if askokcancel( 'Warning', ('You are about to enter NAND mode. Do it only if you know ' 'what you are doing. Proceed?'), icon=WARNING): self.chk.pack_forget() self.nand_frame.pack(padx=10, pady=(0, 10), fill=X) self.nand_mode = True ################################################################################################ def enable_entries(self, status): self.cid_label['state'] = (NORMAL if status else DISABLED) self.cid_entry['state'] = (NORMAL if status else DISABLED) self.console_id_label['state'] = (NORMAL if status else DISABLED) self.console_id_entry['state'] = (NORMAL if status else DISABLED) ################################################################################################ def choose_nand(self): name = askopenfilename(filetypes=(('nand.bin', '*.bin'), ('DSi-1.mmc', '*.mmc'))) self.nand_file.set(name.encode(getpreferredencoding())) self.nand_button['state'] = (NORMAL if self.nand_file.get() != '' else DISABLED) self.start_button['state'] = (NORMAL if self.nand_file.get() != '' else DISABLED) ################################################################################################ def hiya(self): if not self.nand_mode: showinfo( 'Info', 'Now you will be asked to choose the SD card path that will be used ' 'for installing the custom firmware (or an output folder).\n\nIn order to avoid ' 'boot errors please assure it is empty before continuing.') self.sd_path = askdirectory() # Exit if no path was selected if self.sd_path == '': return # If adding a No$GBA footer, check if CID and ConsoleID values are OK elif self.nand_operation.get() == 2: cid = self.cid.get() console_id = self.console_id.get() # Check lengths if len(cid) != 32: showerror('Error', 'Bad eMMC CID') return elif len(console_id) != 16: showerror('Error', 'Bad Console ID') return # Parse strings to hex try: cid = cid.decode('hex') except TypeError: showerror('Error', 'Bad eMMC CID') return try: console_id = bytearray(reversed(console_id.decode('hex'))) except TypeError: showerror('Error', 'Bad Console ID') return dialog = Toplevel(self) # Open as dialog (parent disabled) dialog.grab_set() dialog.title('Status') # Disable maximizing dialog.resizable(0, 0) frame = Frame(dialog, bd=2, relief=SUNKEN) scrollbar = Scrollbar(frame) scrollbar.pack(side=RIGHT, fill=Y) self.log = ThreadSafeText(frame, bd=0, width=52, height=20, yscrollcommand=scrollbar.set) self.log.pack() scrollbar.config(command=self.log.yview) frame.pack() Button(dialog, text='Close', command=dialog.destroy, width=16).pack(pady=10) # Center in window dialog.update_idletasks() width = dialog.winfo_width() height = dialog.winfo_height() dialog.geometry( '%dx%d+%d+%d' % (width, height, root.winfo_x() + (root.winfo_width() / 2) - (width / 2), root.winfo_y() + (root.winfo_height() / 2) - (height / 2))) # Check if we'll be adding a No$GBA footer if self.nand_mode and self.nand_operation.get() == 2: Thread(target=self.add_footer, args=(cid, console_id)).start() else: Thread(target=self.check_nand).start() ################################################################################################ def check_nand(self): self.log.write('Checking NAND file...') # Read the NAND file try: with open(self.nand_file.get(), 'rb') as f: # Go to the No$GBA footer offset f.seek(-64, 2) # Read the footer's header :-) bstr = f.read(0x10) if bstr == b'DSi eMMC CID/CPU': # Read the CID bstr = f.read(0x10) self.cid.set(hexlify(bstr).upper()) self.log.write('- eMMC CID: ' + self.cid.get()) # Read the console ID bstr = f.read(8) self.console_id.set( hexlify(bytearray(reversed(bstr))).upper()) self.log.write('- Console ID: ' + self.console_id.get()) # Check we are making an unlaunch operation or removing the No$GBA footer if self.nand_mode: if self.nand_operation.get() == 0: Thread(target=self.decrypt_nand).start() else: Thread(target=self.remove_footer).start() pass else: Thread(target=self.get_latest_hiyacfw).start() else: self.log.write('ERROR: No$GBA footer not found') except IOError: self.log.write('ERROR: Could not open the file ' + path.basename(self.nand_file.get())) ################################################################################################ def get_latest_hiyacfw(self): # Try to use already downloaded HiyaCFW archive filename = 'HiyaCFW.7z' try: if path.isfile(filename): self.log.write('\nPreparing HiyaCFW...') else: self.log.write('\nDownloading latest HiyaCFW release...') conn = urlopen( 'https://api.github.com/repos/RocketRobz/hiyaCFW/releases/latest' ) latest = jsonify(conn) conn.close() urlretrieve(latest['assets'][0]['browser_download_url'], filename) self.log.write('- Extracting HiyaCFW archive...') exe = path.join(sysname, '7za') proc = Popen([ exe, 'x', '-bso0', '-y', filename, 'for PC', 'for SDNAND SD card' ]) ret_val = proc.wait() if ret_val == 0: self.folders.append('for PC') self.folders.append('for SDNAND SD card') # Got to decrypt NAND if bootloader.nds is present Thread(target=self.decrypt_nand if path.isfile( 'bootloader.nds') else self.extract_bios).start() else: self.log.write('ERROR: Extractor failed') except (URLError, IOError) as e: self.log.write('ERROR: Could not get HiyaCFW') if self.twilight.get(): self.log.write( '\nPlease download the latest versions of HiyaCFW and\nTWiLight Menu++ from:' ) self.log.write( '\nhttps://github.com/RocketRobz/hiyaCFW/releases') self.log.write( 'https://github.com/RocketRobz/TWiLightMenu/releases') self.log.write('\nThen place the files in this folder.') else: self.log.write( '\nPlease download the latest version of HiyaCFW from:') self.log.write( '\nhttps://github.com/RocketRobz/hiyaCFW/releases') self.log.write('\nThen place the file in this folder.') except OSError: self.log.write('ERROR: Could not execute ' + exe) ################################################################################################ def extract_bios(self): self.log.write('\nExtracting ARM7/ARM9 BIOS from NAND...') exe = path.join(sysname, 'twltool') try: proc = Popen([exe, 'boot2', '--in', self.nand_file.get()]) ret_val = proc.wait() if ret_val == 0: # Hash arm7.bin sha1_hash = sha1() with open('arm7.bin', 'rb') as f: sha1_hash.update(f.read()) self.log.write('- arm7.bin SHA1:\n ' + hexlify(sha1_hash.digest()).upper()) # Hash arm9.bin sha1_hash = sha1() with open('arm9.bin', 'rb') as f: sha1_hash.update(f.read()) self.log.write('- arm9.bin SHA1:\n ' + hexlify(sha1_hash.digest()).upper()) self.files.append('arm7.bin') self.files.append('arm9.bin') Thread(target=self.patch_bios).start() else: self.log.write('ERROR: Extractor failed') Thread(target=self.clean, args=(True, )).start() except OSError: self.log.write('ERROR: Could not execute ' + exe) Thread(target=self.clean, args=(True, )).start() ################################################################################################ def patch_bios(self): self.log.write('\nPatching ARM7/ARM9 BIOS...') try: self.patcher( path.join('for PC', 'bootloader files', 'bootloader arm7 patch.ips'), 'arm7.bin') self.patcher( path.join('for PC', 'bootloader files', 'bootloader arm9 patch.ips'), 'arm9.bin') # Hash arm7.bin sha1_hash = sha1() with open('arm7.bin', 'rb') as f: sha1_hash.update(f.read()) self.log.write('- Patched arm7.bin SHA1:\n ' + hexlify(sha1_hash.digest()).upper()) # Hash arm9.bin sha1_hash = sha1() with open('arm9.bin', 'rb') as f: sha1_hash.update(f.read()) self.log.write('- Patched arm9.bin SHA1:\n ' + hexlify(sha1_hash.digest()).upper()) Thread(target=self.arm9_prepend).start() except IOError: self.log.write('ERROR: Could not patch BIOS') Thread(target=self.clean, args=(True, )).start() except Exception: self.log.write('ERROR: Invalid patch header') Thread(target=self.clean, args=(True, )).start() ################################################################################################ def arm9_prepend(self): self.log.write('\nPrepending data to ARM9 BIOS...') try: with open('arm9.bin', 'rb') as f: data = f.read() with open('arm9.bin', 'wb') as f: with open( path.join('for PC', 'bootloader files', 'bootloader arm9 append to start.bin'), 'rb') as pre: f.write(pre.read()) f.write(data) # Hash arm9.bin sha1_hash = sha1() with open('arm9.bin', 'rb') as f: sha1_hash.update(f.read()) self.log.write('- Prepended arm9.bin SHA1:\n ' + hexlify(sha1_hash.digest()).upper()) Thread(target=self.make_bootloader).start() except IOError: self.log.write('ERROR: Could not prepend data to ARM9 BIOS') Thread(target=self.clean, args=(True, )).start() ################################################################################################ def make_bootloader(self): self.log.write('\nGenerating new bootloader...') exe = (path.join('for PC', 'bootloader files', 'ndstool') if sysname == 'Windows' else path.join(sysname, 'ndsblc')) try: proc = Popen([ exe, '-c', 'bootloader.nds', '-9', 'arm9.bin', '-7', 'arm7.bin', '-t', path.join('for PC', 'bootloader files', 'banner.bin'), '-h', path.join('for PC', 'bootloader files', 'header.bin') ]) ret_val = proc.wait() if ret_val == 0: # Hash bootloader.nds sha1_hash = sha1() with open('bootloader.nds', 'rb') as f: sha1_hash.update(f.read()) self.log.write('- bootloader.nds SHA1:\n ' + hexlify(sha1_hash.digest()).upper()) Thread(target=self.decrypt_nand).start() else: self.log.write('ERROR: Generator failed') Thread(target=self.clean, args=(True, )).start() except OSError: self.log.write('ERROR: Could not execute ' + exe) Thread(target=self.clean, args=(True, )).start() ################################################################################################ def decrypt_nand(self): self.log.write('\nDecrypting NAND...') exe = path.join(sysname, 'twltool') try: proc = Popen([ exe, 'nandcrypt', '--in', self.nand_file.get(), '--out', self.console_id.get() + '.img' ]) ret_val = proc.wait() if ret_val == 0: if not self.nand_mode: self.files.append(self.console_id.get() + '.img') Thread(target=self.mount_nand).start() else: self.log.write('ERROR: Decryptor failed') Thread(target=self.clean, args=(True, )).start() except OSError: self.log.write('ERROR: Could not execute ' + exe) Thread(target=self.clean, args=(True, )).start() ################################################################################################ def mount_nand(self): self.log.write('\nMounting decrypted NAND...') try: if sysname == 'Windows': exe = osfmount cmd = [ osfmount, '-a', '-t', 'file', '-f', self.console_id.get() + '.img', '-m', '#:', '-o', 'ro,rem' ] if self.nand_mode: cmd[-1] = 'rw,rem' proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) outs, errs = proc.communicate() if proc.returncode == 0: self.mounted = search(r'[a-zA-Z]:\s', outs).group(0).strip() self.log.write('- Mounted on drive ' + self.mounted) else: self.log.write('ERROR: Mounter failed') Thread(target=self.clean, args=(True, )).start() return elif sysname == 'Darwin': exe = 'hdiutil' cmd = [ exe, 'attach', '-imagekey', 'diskimage-class=CRawDiskImage', '-nomount', self.console_id.get() + '.img' ] if not self.nand_mode: cmd.insert(2, '-readonly') proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) outs, errs = proc.communicate() if proc.returncode == 0: self.raw_disk = search(r'^\/dev\/disk\d+', outs).group(0) self.log.write('- Mounted raw disk on ' + self.raw_disk) cmd = [exe, 'mount', self.raw_disk + 's1'] if not self.nand_mode: cmd.insert(2, '-readonly') proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) outs, errs = proc.communicate() if proc.returncode == 0: self.mounted = search(r'\/Volumes\/.+', outs).group(0) self.log.write('- Mounted volume on ' + self.mounted) else: self.log.write('ERROR: Mounter failed') Thread(target=self.clean, args=(True, )).start() return else: self.log.write('ERROR: Mounter failed') Thread(target=self.clean, args=(True, )).start() return else: # Linux exe = 'losetup' cmd = [ exe, '-P', '-f', '--show', self.console_id.get() + '.img' ] if not self.nand_mode: cmd.insert(2, '-r') proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) outs, errs = proc.communicate() if proc.returncode == 0: self.loop_dev = search(r'\/dev\/loop\d+', outs).group(0) self.log.write('- Mounted loop device on ' + self.loop_dev) exe = 'mount' self.mounted = '/mnt' cmd = [ exe, '-t', 'vfat', self.loop_dev + 'p1', self.mounted ] if not self.nand_mode: cmd.insert(1, '-r') proc = Popen(cmd) ret_val = proc.wait() if ret_val == 0: self.log.write('- Mounted partition on ' + self.mounted) else: self.log.write('ERROR: Mounter failed') Thread(target=self.clean, args=(True, )).start() return else: self.log.write('ERROR: Mounter failed') Thread(target=self.clean, args=(True, )).start() return # Check we are making an unlaunch operation Thread(target=self.unlaunch_proc if self.nand_mode else self. extract_nand).start() except OSError: self.log.write('ERROR: Could not execute ' + exe) Thread(target=self.clean, args=(True, )).start() ################################################################################################ def extract_nand(self): self.log.write('\nExtracting files from NAND...') err = False # Reset copied files cache _path_created.clear() try: copy_tree(self.mounted, self.sd_path, preserve_mode=0, update=1) except: self.log.write('ERROR: Extractor failed') err = True Thread(target=self.unmount_nand, args=(err, )).start() ################################################################################################ def unmount_nand(self, err=False): self.log.write('\nUnmounting NAND...') try: if sysname == 'Windows': exe = osfmount proc = Popen([osfmount, '-D', '-m', self.mounted]) elif sysname == 'Darwin': exe = 'hdiutil' proc = Popen([exe, 'detach', self.raw_disk]) else: # Linux exe = 'umount' proc = Popen([exe, self.mounted]) ret_val = proc.wait() if ret_val == 0: exe = 'losetup' proc = Popen([exe, '-d', self.loop_dev]) else: self.log.write('ERROR: Unmounter failed') Thread(target=self.clean, args=(True, )).start() return ret_val = proc.wait() if ret_val == 0: if err: Thread(target=self.clean, args=(True, )).start() else: Thread(target=self.encrypt_nand if self. nand_mode else self.get_launcher).start() else: self.log.write('ERROR: Unmounter failed') Thread(target=self.clean, args=(True, )).start() except OSError: self.log.write('ERROR: Could not execute ' + exe) Thread(target=self.clean, args=(True, )).start() ################################################################################################ def get_launcher(self): app = self.detect_region() # Stop if no supported region was found if not app: self.files.append('bootloader.nds') Thread(target=self.clean, args=(True, )).start() return # Check if unlaunch was installed on the NAND dump if path.getsize( path.join(self.sd_path, 'title', '00030017', app, 'content', 'title.tmd')) > 520: self.log.write('- WARNING: Unlaunch installed on the NAND dump') # Try to use already downloaded launcher try: if path.isfile(self.launcher_region): self.log.write('\nPreparing ' + self.launcher_region + ' launcher...') else: self.log.write('\nDownloading ' + self.launcher_region + ' launcher...') urlretrieve( 'https://raw.githubusercontent.com/mondul/HiyaCFW-Helper/master/' 'launchers/' + self.launcher_region, self.launcher_region) self.log.write('- Decrypting launcher...') exe = path.join(sysname, '7za') proc = Popen([ exe, 'x', '-bso0', '-y', '-p' + app, self.launcher_region, '00000002.app' ]) ret_val = proc.wait() if ret_val == 0: # Hash 00000002.app sha1_hash = sha1() with open('00000002.app', 'rb') as f: sha1_hash.update(f.read()) self.log.write('- Patched launcher SHA1:\n ' + hexlify(sha1_hash.digest()).upper()) Thread(target=self.install_hiyacfw, args=(path.join(self.sd_path, 'title', '00030017', app, 'content', '00000002.app'), )).start() else: self.log.write('ERROR: Extractor failed') Thread(target=self.clean, args=(True, )).start() except IOError: self.log.write('ERROR: Could not download ' + self.launcher_region + ' launcher') Thread(target=self.clean, args=(True, )).start() except OSError: self.log.write('ERROR: Could not execute ' + exe) Thread(target=self.clean, args=(True, )).start() ################################################################################################ def install_hiyacfw(self, launcher_path): self.log.write('\nCopying HiyaCFW files...') try: self.log.write('- Deleting stock launcher title.tmd...') if self.launcher_region == 'USA': remove( path.join(self.sd_path, 'title', '00030017', '484e4145', 'content', 'title.tmd')) if self.launcher_region == 'JAP': remove( path.join(self.sd_path, 'title', '00030017', '484e414a', 'content', 'title.tmd')) if self.launcher_region == 'EUR': remove( path.join(self.sd_path, 'title', '00030017', '484e4150', 'content', 'title.tmd')) if self.launcher_region == 'AUS': remove( path.join(self.sd_path, 'title', '00030017', '484e4155', 'content', 'title.tmd')) except: pass copy_tree('for SDNAND SD card', self.sd_path, update=1) move('bootloader.nds', path.join(self.sd_path, 'hiya', 'bootloader.nds')) move('00000002.app', launcher_path) Thread(target=self.get_latest_twilight if self.twilight.get() == 1 else self.clean).start() ################################################################################################ def get_latest_twilight(self): filename = False # Release archives names names = ('TWiLightMenu.7z', 'DSiMenuPP.7z', 'DSiMenuPlusPlus.7z', 'SRLoader.7z') for name in names: if (path.isfile(name)): filename = name break try: if filename: self.log.write('\nPreparing custom firmware...') else: self.log.write( '\nDownloading latest TWiLight Menu++ release...') conn = urlopen( 'https://api.github.com/repos/RocketRobz/TWiLightMenu/releases/' 'latest') latest = jsonify(conn) conn.close() filename = names[0] urlretrieve(latest['assets'][0]['browser_download_url'], filename) self.log.write('- Extracting ' + filename[:-3] + ' archive...') exe = path.join(sysname, '7za') proc = Popen([ exe, 'x', '-bso0', '-y', filename, 'Autoboot for HiyaCFW', 'CFW - SDNAND root', 'DSiWare (' + self.launcher_region + ')', '_nds', 'roms', 'BOOT.NDS' ]) ret_val = proc.wait() if ret_val == 0: self.folders.append('Autoboot for HiyaCFW') self.folders.append('CFW - SDNAND root') self.folders.append('DSiWare (' + self.launcher_region + ')') Thread(target=self.install_twilight, args=(filename[:-3], )).start() else: self.log.write('ERROR: Extractor failed') Thread(target=self.clean, args=(True, )).start() except (URLError, IOError) as e: self.log.write('ERROR: Could not get TWiLight Menu++') Thread(target=self.clean, args=(True, )).start() except OSError: self.log.write('ERROR: Could not execute ' + exe) Thread(target=self.clean, args=(True, )).start() ################################################################################################ def install_twilight(self, name): self.log.write('\nCopying ' + name + ' files...') copy_tree('CFW - SDNAND root', self.sd_path, update=1) move('_nds', path.join(self.sd_path, '_nds')) move('roms', path.join(self.sd_path, 'roms')) move('BOOT.NDS', path.join(self.sd_path, 'BOOT.NDS')) copy_tree('DSiWare (' + self.launcher_region + ')', path.join(self.sd_path, 'roms', 'dsiware'), update=1) move(path.join('Autoboot for HiyaCFW', 'autoboot.bin'), path.join(self.sd_path, 'hiya', 'autoboot.bin')) # Set files as read-only twlcfg0 = path.join(self.sd_path, 'shared1', 'TWLCFG0.dat') twlcfg1 = path.join(self.sd_path, 'shared1', 'TWLCFG1.dat') if sysname == 'Darwin': Popen(['chflags', 'uchg', twlcfg0, twlcfg1]).wait() elif sysname == 'Linux': Popen([path.join('Linux', 'fatattr'), '+R', twlcfg0, twlcfg1]).wait() else: chmod(twlcfg0, 292) chmod(twlcfg1, 292) # Generate launchargs for app in listdir(path.join(self.sd_path, 'title', '00030004')): try: for title in listdir( path.join(self.sd_path, 'title', '00030004', app, 'content')): if title.endswith('.app'): with open( path.join(self.sd_path, 'roms', 'dsiware', app + '.launcharg'), 'w') as launcharg: launcharg.write('sd:/title/00030004/' + app + '/') except: pass Thread(target=self.clean).start() ################################################################################################ def clean(self, err=False): self.log.write('\nCleaning...') while len(self.folders) > 0: rmtree(self.folders.pop(), ignore_errors=True) while len(self.files) > 0: try: remove(self.files.pop()) except: pass if err: self.log.write('Done') return # Get logged user in Linux if sysname == 'Linux': from os import getlogin # Workaround for some Linux systems where this function does not work try: ug = getlogin() except OSError: ug = 'root' if (self.nand_mode): file = self.console_id.get() + self.suffix + '.bin' rename(self.console_id.get() + '.img', file) # Change owner of the file in Linux if sysname == 'Linux': Popen(['chown', '-R', ug + ':' + ug, file]).wait() self.log.write('\nDone!\nModified NAND stored as\n' + file) return # Change owner of the out folder in Linux if sysname == 'Linux': Popen(['chown', '-R', ug + ':' + ug, self.sd_path]).wait() self.log.write( 'Done!\nExtract your SD card and insert it into your DSi') ################################################################################################ def patcher(self, patchpath, filepath): patch_size = path.getsize(patchpath) patchfile = open(patchpath, 'rb') if patchfile.read(5) != b'PATCH': patchfile.close() raise Exception() target = open(filepath, 'r+b') # Read First Record r = patchfile.read(3) while patchfile.tell() not in [patch_size, patch_size - 3]: # Unpack 3-byte pointers. offset = self.unpack_int(r) # Read size of data chunk r = patchfile.read(2) size = self.unpack_int(r) if size == 0: # RLE Record r = patchfile.read(2) rle_size = self.unpack_int(r) data = patchfile.read(1) * rle_size else: data = patchfile.read(size) # Write to file target.seek(offset) target.write(data) # Read Next Record r = patchfile.read(3) if patch_size - 3 == patchfile.tell(): trim_size = self.unpack_int(patchfile.read(3)) target.truncate(trim_size) # Cleanup target.close() patchfile.close() ################################################################################################ def unpack_int(self, bstr): # Read an n-byte big-endian integer from a byte string (ret_val, ) = unpack_from('>I', b'\x00' * (4 - len(bstr)) + bstr) return ret_val ################################################################################################ def detect_region(self): REGION_CODES = { '484e4145': 'USA', '484e414a': 'JAP', '484e4150': 'EUR', '484e4155': 'AUS' } # Autodetect console region base = self.mounted if self.nand_mode else self.sd_path try: for app in listdir(path.join(base, 'title', '00030017')): for file in listdir( path.join(base, 'title', '00030017', app, 'content')): if file.endswith('.app'): try: self.log.write('- Detected ' + REGION_CODES[app] + ' console NAND dump') self.launcher_region = REGION_CODES[app] return app except KeyError: self.log.write('ERROR: Unsupported console region') return False self.log.write('ERROR: Could not detect console region') except OSError as e: self.log.write('ERROR: ' + e.strerror + ': ' + e.filename) return False ################################################################################################ def unlaunch_proc(self): self.log.write('\nChecking unlaunch status...') app = self.detect_region() # Stop if no supported region was found if not app: # TODO: Unmount NAND return tmd = path.join(self.mounted, 'title', '00030017', app, 'content', 'title.tmd') tmd_size = path.getsize(tmd) if tmd_size == 520: self.log.write('- Not installed. Downloading v1.4...') try: filename = urlretrieve( 'http://problemkaputt.de/unlau14.zip')[0] exe = path.join(sysname, '7za') proc = Popen( [exe, 'x', '-bso0', '-y', filename, 'UNLAUNCH.DSI']) ret_val = proc.wait() if ret_val == 0: self.files.append(filename) self.files.append('UNLAUNCH.DSI') self.log.write('- Installing unlaunch...') self.suffix = '-unlaunch' with open(tmd, 'ab') as f: with open('UNLAUNCH.DSI', 'rb') as unl: f.write(unl.read()) # Set files as read-only for file in listdir( path.join(self.mounted, 'title', '00030017', app, 'content')): file = path.join(self.mounted, 'title', '00030017', app, 'content', file) if sysname == 'Darwin': Popen(['chflags', 'uchg', file]).wait() elif sysname == 'Linux': Popen([path.join('Linux', 'fatattr'), '+R', file]).wait() else: chmod(file, 292) else: self.log.write('ERROR: Extractor failed') # TODO: Unmount NAND except IOError: self.log.write('ERROR: Could not get unlaunch') # TODO: Unmount NAND except OSError: self.log.write('ERROR: Could not execute ' + exe) # TODO: Unmount NAND else: self.log.write('- Installed. Uninstalling...') self.suffix = '-no-unlaunch' # Set files as read-write for file in listdir( path.join(self.mounted, 'title', '00030017', app, 'content')): file = path.join(self.mounted, 'title', '00030017', app, 'content', file) if sysname == 'Darwin': Popen(['chflags', 'nouchg', file]).wait() elif sysname == 'Linux': Popen([path.join('Linux', 'fatattr'), '-R', file]).wait() else: chmod(file, 438) with open(tmd, 'r+b') as f: f.truncate(520) Thread(target=self.unmount_nand).start() ################################################################################################ def encrypt_nand(self): self.log.write('\nEncrypting back NAND...') exe = path.join(sysname, 'twltool') try: proc = Popen( [exe, 'nandcrypt', '--in', self.console_id.get() + '.img']) ret_val = proc.wait() if ret_val == 0: Thread(target=self.clean).start() else: self.log.write('ERROR: Encryptor failed') except OSError: self.log.write('ERROR: Could not execute ' + exe) ################################################################################################ def remove_footer(self): self.log.write('\nRemoving No$GBA footer...') file = self.console_id.get() + '-no-footer.bin' try: copyfile(self.nand_file.get(), file) # Back-up footer info with open(self.console_id.get() + '-info.txt', 'wb') as f: f.write('eMMC CID: ' + self.cid.get() + '\r\n') f.write('Console ID: ' + self.console_id.get() + '\r\n') with open(file, 'r+b') as f: # Go to the No$GBA footer offset f.seek(-64, 2) # Remove footer f.truncate() # Change owner of the file in Linux if sysname == 'Linux': from os import getlogin ug = getlogin() Popen(['chown', '-R', ug + ':' + ug, file]).wait() self.log.write('\nDone!\nModified NAND stored as\n' + file + '\nStored footer info in ' + self.console_id.get() + '-info.txt') except IOError: self.log.write('ERROR: Could not open the file ' + path.basename(self.nand_file.get())) ################################################################################################ def add_footer(self, cid, console_id): self.log.write('Adding No$GBA footer...') file = self.console_id.get() + '-footer.bin' try: copyfile(self.nand_file.get(), file) with open(file, 'r+b') as f: # Go to the No$GBA footer offset f.seek(-64, 2) # Read the footer's header :-) bstr = f.read(0x10) # Check if it already has a footer if bstr == b'DSi eMMC CID/CPU': self.log.write('ERROR: File already has a No$GBA footer') f.close() remove(file) return # Go to the end of file f.seek(0, 2) # Write footer f.write(b'DSi eMMC CID/CPU') f.write(cid) f.write(console_id) f.write('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') self.log.write('\nDone!\nModified NAND stored as\n' + file) except IOError: self.log.write('ERROR: Could not open the file ' + path.basename(self.nand_file.get()))
def __init__(self, master=None, main=None): Frame.__init__(self, master) self.parent = master self.main = main self.parent.geometry("336x424") self.parent.title(os.getenv("NAME") + " - Board Config") self.master.configure(padx=10, pady=10) self.intvar = IntVar() #Arch self.arch_var = IntVar() lf_arch = LabelFrame(self.parent, text="Architecture") lf_arch.pack(fill=X, expand=True, side=TOP) frame_arch = Frame(lf_arch) frame_arch.pack(fill=X, expand=True, side=TOP) frame_left1 = Frame(frame_arch) frame_left1.pack(expand=True, fill=BOTH, side=LEFT) frame_right1 = Frame(frame_arch) frame_right1.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_arch_8 = Radiobutton(frame_left1, text="8-bit ", anchor="w", width=10, value=8, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_8.pack(fill=X, side=TOP) self.radioButton_arch_32 = Radiobutton(frame_right1, text="32-bit", anchor="w", width=10, value=32, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_32.pack(fill=X, side=TOP) #Mode self.mode_var = StringVar() lf_mode = LabelFrame(self.parent, text="Programming mode") lf_mode.pack(fill=X, expand=True, side=TOP) frame_mode = Frame(lf_mode) frame_mode.pack(fill=X, expand=True, side=TOP) frame_left2 = Frame(frame_mode) frame_left2.pack(expand=True, fill=BOTH, side=LEFT) frame_right2 = Frame(frame_mode) frame_right2.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_mode_icsp = Radiobutton(frame_left2, text="ICSP", anchor="w", width=10, value="icsp", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_icsp.pack(side=TOP, fill=X) self.radioButton_mode_bootloader = Radiobutton(frame_right2, text="Bootloader", anchor="w", width=10, value="bootloader", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_bootloader.pack(side=TOP, fill=X) #Bootloader self.boot_var = StringVar() self.lf_boot = LabelFrame(self.parent, text="Bootloader") self.lf_boot.pack(fill=X, expand=True, side=TOP) frame_boot = Frame(self.lf_boot) frame_boot.pack(fill=X, expand=True, side=TOP) frame_left3 = Frame(frame_boot) frame_left3.pack(expand=True, fill=BOTH, side=LEFT) frame_right3 = Frame(frame_boot) frame_right3.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3, text="v1.x or v2.x", anchor="w", width=10, value="v1_v2", variable=self.boot_var) self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True) self.radioButton_bootloader_v4 = Radiobutton(frame_right3, text="v4.x", anchor="w", width=10, value="v4", variable=self.boot_var) self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True) #Devices 8bit self.dev8_var = StringVar() self.lf_dev8 = LabelFrame(self.parent, text="Devices") self.lf_dev8.pack(fill=X, expand=True, side=TOP) self.frame_8b = Frame(self.lf_dev8) self.frame_8b.pack(fill=X, expand=True, side=TOP) #Devices 32bit self.dev32_var = StringVar() self.lf_dev32 = LabelFrame(self.parent, text="Devices") self.lf_dev32.pack(fill=X, expand=True, side=TOP) self.frame_32b = Frame(self.lf_dev32) self.frame_32b.pack(fill=X, expand=True, side=TOP) frame_buttons = Frame(self.parent) Button(frame_buttons, text="Accept", command=self.accept_config).pack(fill=X, expand=True, side=RIGHT) Button(frame_buttons, text="Cancel", command=self.quit).pack(fill=X, expand=True, side=LEFT) frame_buttons.pack(fill=X, expand=True, side=BOTTOM) frame_advance = Frame(self.parent) self.advanceoptions = Button(frame_advance, text="Advance options", command=self.advance) self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) frame_advance.pack(fill=X, expand=True, side=BOTTOM) frame_warning = Frame(self.parent) self.label_warning = Label(frame_warning, fg="red", text="warning!", anchor="w") self.label_warning.pack(fill=X, expand=True, side=BOTTOM) frame_warning.pack(fill=X, expand=True, side=BOTTOM) self.build_devices_arch() self.load_config() self.init_groups()
class view(Tk): def mkStringVar(self, s): R = StringVar() R.set(s) return R def mkLabel(self, f, T, r, c, rs=1, cs=1): if isinstance(T, type(StringVar())): R = Label(f, textvariable = T, relief=GROOVE, borderwidth=2) else: R = Label(f, text = T, relief=GROOVE, borderwidth=2) R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens") return R def mkLabelList(self, f, SV, r): R = [] for i in range(len(SV)): R.append(self.mkLabel(f, SV[i], r, i+1)) return R def mkButton(self, f, t, r, c, rs=1, cs=1): R = Button(f, text=t) R.grid( row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens") return R # ===== HALT et cetera ========================================================= def mkHaltArea(self, f): self.HALTframe = Frame(f) self.HALTframe.config(relief=GROOVE) self.HALTframe.config(borderwidth=2) self.HALTbutton = Button(self.HALTframe, text = "HALT", width=10) self.READMEbutton = Button(self.HALTframe, text = "README", width=10) self.HALTbutton.config(borderwidth=2, relief=GROOVE, fg="red") self.HALTbutton.config(command = self.quit) self.READMEbutton.config(borderwidth=2, relief=GROOVE, fg="red") self.HALTbutton.pack(side=LEFT, fill=BOTH) self.READMEbutton.pack(side=RIGHT, fill=BOTH) self.HALTframe.grid(row=0, column=9, rowspan=1, columnspan=4, sticky="wens") # ============================================================================== def mkProgramControl(self, f): self.PROGRAMCONTROLframe = Frame(f) self.PROGRAMCONTROLframe.config(relief=GROOVE) self.PROGRAMCONTROLframe.config(borderwidth=2) self.runButton = Button(self.PROGRAMCONTROLframe, text="RUN", width=10) self.runButton.grid(row=0, column=0, sticky="wens", padx=29, pady=7) self.stepButton = Button(self.PROGRAMCONTROLframe, text="STEP", width=10) self.stepButton.grid(row=1, column=0, sticky="wens", padx=29, pady=5) self.noStepButton = Button(self.PROGRAMCONTROLframe, text="NOSTEP", width=10) self.noStepButton.grid(row=2, column=0, sticky="wens", padx=29, pady=7) self.PROGRAMCONTROLframe.grid(row=17, column=11, rowspan=6, columnspan=2, sticky="wens") # ============================================================================== def getPGMfileName(self): options = {'filetypes': [('pgm files', '.pgm')]} f = askopenfilename(**options) g = f.split('/') self.filenameVar.set(g[len(g) - 1]) return f def mkProgramLoad(self, f): self.PROGRAMLOADframe = Frame(f) self.PROGRAMLOADframe.config(relief=GROOVE) self.PROGRAMLOADframe.config(borderwidth=2) self.loadPGMbutton = Button(self.PROGRAMLOADframe, text="Load PGM") self.loadPGMbutton.config(width=14) self.loadPGMbutton.pack(side=LEFT, fill=BOTH, padx=20, pady=5) self.filenameVar = StringVar() self.filenameVar.set("*****.pgm") self.fileNameLabel = Label(self.PROGRAMLOADframe, textvariable=self.filenameVar) self.fileNameLabel.config(relief=GROOVE, borderwidth=2, width=17) self.fileNameLabel.pack(side=RIGHT, fill=BOTH, padx=20, pady=5) self.PROGRAMLOADframe.grid(row=15, column=9, rowspan=2, columnspan=4, sticky="wens") # ============================================================================== def mkMemory(self, f): self.MEMORYframe = Frame(f) self.MEMORYframe.config(relief=GROOVE) self.MEMORYframe.config(borderwidth=2) E = Frame(self.MEMORYframe) self.CLEAR = self.mkButton(E, "ClearMem", 0, 0) self.RANDOM = self.mkButton(E, "RandomMem", 0, 1) self.READ = self.mkButton(E, "ReadMem", 1, 0) self.WRITE = self.mkButton(E, "WriteMem", 1, 1) self.BUSTOMEM = self.mkButton(E, "BusToMem", 2, 0, 1, 2) F = Frame(self.MEMORYframe) for i in Range8: L = Label(F, textvariable=self.MEMORY[i]) L.config(relief=GROOVE, borderwidth=2, bg="black", fg="yellow", height=1) L.grid(row=0, column=i, sticky="wens", ipadx=5) E.pack(side=TOP) F.pack(side=BOTTOM) self.MEMORYframe.grid(row=18, column=9, rowspan=5, columnspan=2, sticky="wens") # ============================================================================== def mkDataBus(self, f): self.DBframe = Frame(f) self.DBframe.config(relief=GROOVE) self.DBframe.config(borderwidth=2, bg="red") self.DBframe.grid(row=0, column=0, rowspan=1, \ columnspan=9, sticky="wens") self.databusLabel = Label(self.DBframe, text="Data\nBus", width=10) self.databusLabel.pack(side=LEFT) self.DATABUSbuttons = [] for i in Range8: b = Button(self.DBframe, textvariable=self.DATABUS[i]) b.pack(side=LEFT, fill=BOTH) self.DATABUSbuttons.append(b) def mkAddressBus(self, f): self.ABframe = Frame(f) self.ABframe.config(relief=GROOVE) self.ABframe.config(borderwidth=2, bg="red") self.ABframe.grid(row=26, column=0, rowspan=1, columnspan=13, sticky="wens") self.AddressBusLabel = Label(self.ABframe, text="Address\nBus", width=12) self.AddressBusLabel.pack(side=LEFT) self.ADDRESSBUSbuttons = [] for i in Range16: b = Button(self.ABframe, textvariable=self.ADDRESSBUS[i]) b.pack(side=LEFT, fill=BOTH, ipadx=2) self.ADDRESSBUSbuttons.append(b) # ============================================================================== def mkALU(self, f): self.ALUframe = Frame(f) self.ALUframe.config(relief=GROOVE) self.ALUframe.config(borderwidth=2) self.mkFunctionChoice(self.ALUframe) self.mkStates(self.ALUframe) self.ALUframe.grid(row=23, column=9, rowspan=3, columnspan=4, sticky="wens") def mkFunctionChoice(self, f): self.FUNCTIONframe = Frame(f) self.FUNCTIONframe.config(relief=GROOVE) self.FUNCTIONframe.config(borderwidth=2) self.F0label = Label(self.FUNCTIONframe, text="F0", borderwidth=2, relief=GROOVE) self.F0label.grid(row=0, column=0, sticky="wens", padx=5) self.F1label = Label(self.FUNCTIONframe, text="F1", borderwidth=2, relief=GROOVE) self.F1label.grid(row=0, column=1, sticky="wens", padx=8) self.F2label = Label(self.FUNCTIONframe, text="F2", borderwidth=2, relief=GROOVE) self.F2label.grid(row=0, column=2, sticky="wens", padx=5) self.FUNCTIONbuttons = [] self.F0button = Button(self.FUNCTIONframe) self.F0button.config(textvariable=self.FUNCTION[0], borderwidth=2, relief=GROOVE) self.F1button = Button(self.FUNCTIONframe) self.F1button.config(textvariable=self.FUNCTION[1], borderwidth=2, relief=GROOVE) self.F2button = Button(self.FUNCTIONframe) self.F2button.config(textvariable=self.FUNCTION[2], borderwidth=2, relief=GROOVE) self.FUNCTIONbuttons.append(self.F0button) self.FUNCTIONbuttons.append(self.F1button) self.FUNCTIONbuttons.append(self.F2button) for i in Range3: self.FUNCTIONbuttons[i].grid(row=1, column=i, sticky="wens", padx=5) self.FUNCTIONframe.pack(side=LEFT, padx=8, pady=3) def mkStates(self, f): self.STATESframe = Frame(f) self.STATESframe.config(relief=GROOVE) self.STATESframe.config(borderwidth=2) self.CARRYtag = Label(self.STATESframe, text = " carry ", borderwidth=2, relief=GROOVE) self.CARRYtag.grid(row=0, column=0, padx=5, pady=2, sticky="wens") self.ZEROtag = Label(self.STATESframe, text = " zero ", borderwidth=2, relief=GROOVE) self.ZEROtag.grid(row=0, column=1, padx=5, pady=1, sticky="wens") self.SIGNtag = Label(self.STATESframe, text = " sign ", borderwidth=2, relief=GROOVE) self.SIGNtag.grid(row=0, column=2, padx=5, pady=2, sticky="wens") self.CARRY = self.mkStringVar("0") self.ZERO = self.mkStringVar("0") self.SIGN = self.mkStringVar("0") self.CARRYlabel = Label(self.STATESframe, textvariable = self.CARRY, borderwidth=2, relief=GROOVE) self.CARRYlabel.grid(row=1, column=0, padx=5, pady=2, sticky="wens") self.ZEROlabel = Label(self.STATESframe, textvariable = self.ZERO, borderwidth=2, relief=GROOVE) self.ZEROlabel.grid(row=1, column=1, padx=5, pady=1, sticky="wens") self.SIGNlabel = Label(self.STATESframe, textvariable = self.SIGN, borderwidth=2, relief=GROOVE) self.SIGNlabel.grid(row=1, column=2, padx=5, pady=2, sticky="wens") self.STATESframe.pack(side=RIGHT, padx=8, pady=3) # ============================================================================== def mkTagLabels(self, f): self.ALabel = self.mkLabel(f, "A", 1, 0) self.BLabel = self.mkLabel(f, "B", 2, 0) self.BLabel.config(bg="black", fg="yellow") self.CLabel = self.mkLabel(f, "C", 3, 0) self.CLabel.config(bg="black", fg="yellow") self.DLabel = self.mkLabel(f, "D", 4, 0) self.M1Label = self.mkLabel(f, "M1", 5, 0) self.M2Label = self.mkLabel(f, "M2", 6, 0) self.XLabel = self.mkLabel(f, "X", 7, 0) self.YLabel = self.mkLabel(f, "Y", 8, 0) self.J1Label = self.mkLabel(f, "J1", 9, 0) self.J2Label = self.mkLabel(f, "J2", 10, 0) self.PC1Label = self.mkLabel(f, "PC1", 11, 0) self.PC2Label = self.mkLabel(f, "PC2", 12, 0) self.Inc1Label = self.mkLabel(f, "Inc1", 13, 0) self.Inc2Label = self.mkLabel(f, "Inc2", 14, 0) self.IncUnit1Label = self.mkLabel(f, "IncUnit1", 15, 0) self.IncUnit2Label = self.mkLabel(f, "IncUnit2", 16, 0) self.InstLabel = self.mkLabel(f, "Inst", 17, 0) self.addLabel = self.mkLabel(f, "ADD", 18, 0) self.incLabel = self.mkLabel(f, "INC", 19, 0) self.andLabel = self.mkLabel(f, "AND", 20, 0) self.orLabel = self.mkLabel(f, "OR", 21, 0) self.xorLabel = self.mkLabel(f, "XOR", 22, 0) self.notLabel = self.mkLabel(f, "NOT", 23, 0) self.shlLabel = self.mkLabel(f, "SHL", 24, 0) self.clrLabel = self.mkLabel(f, "CLR", 25, 0) self.functionTagLabelDictionary = { (0,0,0) : self.addLabel, \ (0,0,1) : self.incLabel, \ (0,1,0) : self.andLabel, \ (0,1,1) : self.orLabel, \ (1,0,0) : self.xorLabel, \ (1,0,1) : self.notLabel, \ (1,1,0) : self.shlLabel, \ (1,1,1) : self.clrLabel \ } for i in self.functionTagLabelDictionary.values(): i.config(bg="black", fg="yellow") # ============================================================================== def mkRegisterStringVars(self): self.FUNCTION = [ self.mkStringVar("0") for unused_i in Range3 ] self.DATABUS = [ self.mkStringVar("0") for unused_i in Range8 ] self.Inst = [ self.mkStringVar("0") for unused_i in Range8 ] self.A = [ self.mkStringVar("0") for unused_i in Range8 ] self.B = [ self.mkStringVar("0") for unused_i in Range8 ] self.C = [ self.mkStringVar("0") for unused_i in Range8 ] self.D = [ self.mkStringVar("0") for unused_i in Range8 ] self.M1 = [ self.mkStringVar("0") for unused_i in Range8 ] self.M2 = [ self.mkStringVar("0") for unused_i in Range8 ] self.X = [ self.mkStringVar("0") for unused_i in Range8 ] self.Y = [ self.mkStringVar("0") for unused_i in Range8 ] self.J1 = [ self.mkStringVar("0") for unused_i in Range8 ] self.J2 = [ self.mkStringVar("0") for unused_i in Range8 ] self.PC1 = [ self.mkStringVar("0") for unused_i in Range8 ] self.PC2 = [ self.mkStringVar("0") for unused_i in Range8 ] self.Inc1 = [ self.mkStringVar("0") for unused_i in Range8 ] self.Inc2 = [ self.mkStringVar("0") for unused_i in Range8 ] self.IncUnit1 = [ self.mkStringVar("0") for unused_i in Range8 ] self.IncUnit2 = [ self.mkStringVar("0") for unused_i in Range8 ] self.Add = [ self.mkStringVar("0") for unused_i in Range8 ] self.Inc = [ self.mkStringVar("0") for unused_i in Range8 ] self.And = [ self.mkStringVar("0") for unused_i in Range8 ] self.Or = [ self.mkStringVar("0") for unused_i in Range8 ] self.Xor = [ self.mkStringVar("0") for unused_i in Range8 ] self.Not = [ self.mkStringVar("0") for unused_i in Range8 ] self.Shl = [ self.mkStringVar("0") for unused_i in Range8 ] self.Clr = [ self.mkStringVar("0") for unused_i in Range8 ] self.ADDRESSBUS = [ self.mkStringVar("0") for unused_i in Range16 ] self.MEMORY = [ self.mkStringVar("0") for unused_i in Range8 ] # ============================================================================== def setRegisterLabelColor(self, L, bc, fc="black"): for i in L: i.config(bg=bc, fg=fc) def mkRegisterLabels(self, f): self.Alabels = self.mkLabelList(f, self.A, 1) self.setRegisterLabelColor(self.Alabels, "gray90") self.Blabels = self.mkLabelList(f, self.B, 2) self.setRegisterLabelColor(self.Blabels, "black", "yellow") self.Clabels = self.mkLabelList(f, self.C, 3) self.setRegisterLabelColor(self.Clabels, "black", "yellow") self.Dlabels = self.mkLabelList(f, self.D, 4) self.setRegisterLabelColor(self.Dlabels, "gray90") self.M1labels = self.mkLabelList(f, self.M1, 5) self.setRegisterLabelColor(self.M1labels, "gray90") self.M2labels = self.mkLabelList(f, self.M2, 6) self.setRegisterLabelColor(self.M2labels, "gray90") self.Xlabels = self.mkLabelList(f, self.X, 7) self.setRegisterLabelColor(self.Xlabels, "gray90") self.Ylabels = self.mkLabelList(f, self.Y, 8) self.setRegisterLabelColor(self.Ylabels, "gray90") self.J1labels = self.mkLabelList(f, self.J1, 9) self.J2labels = self.mkLabelList(f, self.J2, 10) self.PC1labels = self.mkLabelList(f, self.PC1, 11) self.PC2labels = self.mkLabelList(f, self.PC2, 12) self.Inc1labels = self.mkLabelList(f, self.Inc1, 13) self.setRegisterLabelColor(self.Inc1labels, "gray95") self.Inc2labels = self.mkLabelList(f, self.Inc2, 14) self.setRegisterLabelColor(self.Inc2labels, "gray95") self.IncUnit1labels = self.mkLabelList(f, self.IncUnit1, 15) self.setRegisterLabelColor(self.IncUnit1labels, "gray95") self.IncUnit2labels = self.mkLabelList(f, self.IncUnit2, 16) self.setRegisterLabelColor(self.IncUnit2labels, "gray95") self.Instlabels = self.mkLabelList(f, self.Inst, 17) self.addlabels = self.mkLabelList(f, self.Add, 18) self.setRegisterLabelColor(self.addlabels, "black", "red") self.inclabels = self.mkLabelList(f, self.Inc, 19) self.setRegisterLabelColor(self.inclabels, "black", "yellow") self.andlabels = self.mkLabelList(f, self.And, 20) self.setRegisterLabelColor(self.andlabels, "black", "yellow") self.orlabels = self.mkLabelList(f, self.Or, 21) self.setRegisterLabelColor(self.orlabels, "black", "yellow") self.xorlabels = self.mkLabelList(f, self.Xor, 22) self.setRegisterLabelColor(self.xorlabels, "black", "yellow") self.notlabels = self.mkLabelList(f, self.Not, 23) self.setRegisterLabelColor(self.notlabels, "black", "yellow") self.shllabels = self.mkLabelList(f, self.Shl, 24) self.setRegisterLabelColor(self.shllabels, "black", "yellow") self.clrlabels = self.mkLabelList(f, self.Clr, 25) self.setRegisterLabelColor(self.clrlabels, "black", "yellow") self.functionLabelsDictionary = { (0,0,0) : self.addlabels, \ (0,0,1) : self.inclabels, \ (0,1,0) : self.andlabels, \ (0,1,1) : self.orlabels, \ (1,0,0) : self.xorlabels, \ (1,0,1) : self.notlabels, \ (1,1,0) : self.shllabels, \ (1,1,1) : self.clrlabels \ } # ===== Load & Select ========================================================== def mkLoad8Buttons(self, f): self.loadA = self.mkButton(f, "load A", 1, 9, 1, 2) self.loadB = self.mkButton(f, "load B", 2, 9, 1, 2) self.loadC = self.mkButton(f, "load C", 3, 9, 1, 2) self.loadD = self.mkButton(f, "load D", 4, 9, 1, 2) self.loadM1 = self.mkButton(f, "load M1", 5, 9, 1, 2) self.loadM2 = self.mkButton(f, "load M2", 6, 9, 1, 2) self.loadX = self.mkButton(f, "load X", 7, 9) self.loadY = self.mkButton(f, "load Y", 8, 9) self.loadJ1 = self.mkButton(f, "load J1", 9, 9, 1, 2) self.loadJ2 = self.mkButton(f, "load J2", 10, 9, 1, 2) self.loadInst = self.mkButton(f, "load Inst", 17, 9, 1, 2) def mkLoad16Buttons(self, f): self.loadXY = self.mkButton(f, "load XY", 7, 10, 2, 1) self.loadPC = self.mkButton(f, "load PC", 11, 9, 2, 2) self.loadINC = self.mkButton(f, "load INC", 13, 9, 2, 2) def mkSelect8Buttons(self, f): self.selectA = self.mkButton(f, "select A", 1, 11, 1, 2) self.selectB = self.mkButton(f, "select B", 2, 11, 1, 2) self.selectC = self.mkButton(f, "select C", 3, 11, 1, 2) self.selectD = self.mkButton(f, "select D", 4, 11, 1, 2) self.selectM1 = self.mkButton(f, "select M1", 5, 11) self.selectM2 = self.mkButton(f, "select M2", 6, 11) self.selectX = self.mkButton(f, "select X", 7, 11) self.selectY = self.mkButton(f, "select Y", 8, 11) def mkSelect16Buttons(self, f): self.selectM = self.mkButton(f, "select M", 5, 12, 2, 1) self.selectXY = self.mkButton(f, "select XY", 7, 12, 2, 1) self.selectJ = self.mkButton(f, "select J", 9, 11, 2, 2) self.selectPC = self.mkButton(f, "select PC", 11, 11, 2, 2) self.selectINC = self.mkButton(f, "select INC", 13, 11, 2, 2) # ===== System Messages ======================================================== def mkMessageArea(self, f): self.text = Text(f, height=36, width=64) self.text.configure(font=("Courier", 11, "bold"), bg="black", fg="green") self.scroll = Scrollbar(f, command = self.text.yview) self.text.configure(yscrollcommand = self.scroll.set) self.text.pack(side=LEFT, padx=3, pady=2) self.scroll.pack(side=RIGHT, fill=Y, padx=3, pady=2) def addText(self, text): self.text.insert(END, text + "\n") self.text.yview(END) # ===== Initialization ========================================================= def __init__(self): Tk.__init__(self) self.title("Virtual Machine") self.config(bg="blue") self.registers = LabelFrame(self, bg="blue") self.registers.config(relief=GROOVE) self.registers.config(borderwidth=2) self.registers.config(text = "Virtual Machine: controls and states") self.registers.config(labelanchor = "nw") self.registers.pack(side = LEFT, fill=BOTH) self.mkRegisterStringVars() self.mkTagLabels(self.registers) self.mkDataBus(self.registers) self.mkRegisterLabels(self.registers) self.mkLoad8Buttons(self.registers) self.mkLoad16Buttons(self.registers) self.mkSelect8Buttons(self.registers) self.mkSelect16Buttons(self.registers) self.mkAddressBus(self.registers) self.mkALU(self.registers) self.mkMemory(self.registers) self.mkProgramLoad(self.registers) self.mkProgramControl(self.registers) self.mkHaltArea(self.registers) self.messages = LabelFrame(self, bg="blue") self.messages.config(relief=GROOVE) self.messages.config(borderwidth=2) self.messages.config(text = "Virtual Machine: system messages") self.messages.config(labelanchor = "nw") self.messages.pack(side = RIGHT, fill=BOTH) self.mkMessageArea(self.messages)
class Facade(Frame): """This is a Frame that contains group info, group order, apex and prime graph. """ def __init__(self, parent, group, show_graph=True, graph_class=None, **kw): """ Parameters: show_graph: whether to create and show graph instantly or provide a button to do that lately graph_factory: callable accepting one argument - the Group instance and returning Graph instance. Note that __str__ method of the callable is used in the UI. """ Frame.__init__(self, parent, **kw) self._group = group # self._show_apex = True self._show_graph = show_graph self._graph_class = graph_class self._init_variables() self._init_menu() self._init_components() @property def group(self): return self._group @property def apex_list_container(self): return self._apex_container @property def graph_canvas(self): return self._graph_canvas def _show_graph_canvas(self): self._show_graph_button.forget() # TODO: add different layouts and other options graph_class = self._graph_class self.graph = graph_class(self._group) self._graph_canvas = GraphCanvas(self._right_pane, SpringLayout(self.graph), caption=str(graph_class)) self._graph_canvas.pack(expand=True, fill='both') self._graph_canvas.vertex_label_mode = self.getvar( name=self.winfo_name() + ".vertexlabelposition") self._iterations_plugin = IterationsPlugin() self._iterations_plugin.apply(self._graph_canvas) self.update_layout() def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised') self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=2, pady=2) self._right_pane = Frame(self._panes) self._panes.add(self._left_pane, width=250) self._panes.add(self._right_pane) # group name group_name_pane = LabelFrame(self._left_pane, text="Group", padx=10, pady=5) group_name_pane.pack(fill='x') self._group_name = GroupNameLabel(group_name_pane, self._group) self._group_name.pack(expand=True, fill='both') # group order group_order_pane = LabelFrame(self._left_pane, text="Order", padx=10, pady=5) group_order_pane.pack(fill='x') self._group_order = IntegerContainer(group_order_pane, integer=self._group.order()) self._group_order.pack(expand=True, fill='both') # apex self._apex_pane = LabelFrame(self._left_pane, text="Apex", padx=10, pady=5) self._apex_pane.pack(expand=True, fill='both') self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex()) self._apex_container.pack(expand=True, fill='both') # graph controls cocliques_frame = LabelFrame(self._left_pane, text="Cocliques", padx=10, pady=5) cocliques_frame.pack(fill='x') self._cocliques_button = Button(cocliques_frame, text="Calculate", command=self._show_cocliques) self._cocliques_button.pack(anchor='nw') self._cocliques_container = ListContainer(cocliques_frame) self._cocliques_list = Listbox(self._cocliques_container) self._cocliques_container.set_listbox(self._cocliques_list) # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw') # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox. self._show_graph_button = Button(self._right_pane, text='Show graph', command=self._show_graph_canvas) self._graph_canvas = None if self._show_graph: self._show_graph_canvas() else: self._show_graph_button.pack() def _init_variables(self): def set_default_var(self, name): """Sets widget-specific var with same value as root. """ default_var = self.getvar(name) local_var_name = self.winfo_name() + "." + name self.setvar(local_var_name, default_var) return local_var_name local_name = set_default_var(self, "vertexlabelposition") tools.trace_variable(self, local_name, "w", self._change_vertex_label_position) def _change_vertex_label_position(self, name, *arg): # override default value self.setvar("vertexlabelposition", self.getvar(name)) if self._graph_canvas is not None: self._graph_canvas.vertex_label_mode = self.getvar(name) def _init_menu(self): """Init menu bar content. """ toplevel = self.winfo_toplevel() if toplevel['menu']: self._menu = self.nametowidget(name=toplevel['menu']) else: self._menu = Menu(toplevel) toplevel['menu'] = self._menu graph_options = Menu(self._menu, tearoff=0) self._menu.add_cascade(label="Graph", menu=graph_options) self._menu_index = self._menu.index("end") vertex_label_position_menu = Menu(graph_options, tearoff=0) graph_options.add_cascade(label="Label position", menu=vertex_label_position_menu) menu_var = self.winfo_name() + ".vertexlabelposition" vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Auto", value="auto") vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Center", value="center") graph_options.add_command(label="Save graph...", command=self.call_graph_save_dialog) self.bind("<Destroy>", self.__destroy_menu) #noinspection PyUnusedLocal def __destroy_menu(self, event): try: self._menu.delete(self._menu_index) except TclError: pass def _show_cocliques(self): cocliques = self.graph.max_cocliques() def select_coclique(*_): index = next(iter(self._cocliques_list.curselection()), None) if index is not None: selected = cocliques[int(index)] pick_state = self._graph_canvas.picked_vertex_state pick_state.clear() for value in selected: pick_state.pick(self._graph_canvas.get_vertex(value)) self._cocliques_list.insert(0, *[', '.join(map(str, coclique)) for coclique in cocliques]) self._cocliques_list.bind("<Double-Button-1>", select_coclique) self._cocliques_button.forget() self._cocliques_container.pack(expand=True, fill='both') def call_graph_save_dialog(self): file_name = tkFileDialog.asksaveasfilename(defaultextension='.ps', filetypes=[('PostScript', '.ps')], parent=self.winfo_toplevel(), title="Save graph as image") if file_name: with codecs.open(file_name, 'w', encoding='utf-8') as f: f.write(self._graph_canvas.postscript()) def update_layout(self): try: self._iterations_plugin.iterate(50) except AttributeError: pass
logger.setLevel(logging.INFO) formatter = logging.Formatter('%(name)-12s: %(asctime)s : %(levelname)-8s %(message)s') logger.handlers[0].setFormatter(formatter) root = Tk() root.iconify() root.wm_title("Correlator Monitor: %s Block" % options.block.capitalize()) plots = Frame(root) plots.pack(side=LEFT, fill=BOTH, expand=1) window = Frame(root) window.pack(side=RIGHT, fill=BOTH, expand=1) plotting = LabelFrame(window, text='Plotting') plotting.pack(fill=BOTH, expand=1) monitor = LabelFrame(window, text='Monitor') monitor.pack(fill=BOTH, expand=1) control = LabelFrame(window, text='Control') control.pack(fill=BOTH, expand=1) window.columnconfigure(0, weight=1) window.columnconfigure(1, weight=1) window.rowconfigure(0, weight=1) window.rowconfigure(1, weight=1) window.rowconfigure(2, weight=1) server = sma.SubmillimeterArrayClient(server_host, server_port)
class view(Tk): def mkStringVar(self, s): R = StringVar() R.set(s) return R def mkLabel(self, f, T, r, c, rs=1, cs=1): if isinstance(T, type(StringVar())): R = Label(f, textvariable=T, relief=GROOVE, borderwidth=2) else: R = Label(f, text=T, relief=GROOVE, borderwidth=2) R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens") return R def mkLabelList(self, f, SV, r): R = [] for i in range(len(SV)): R.append(self.mkLabel(f, SV[i], r, i + 1)) return R def mkButton(self, f, t, r, c, rs=1, cs=1): R = Button(f, text=t) R.grid(row=r, column=c, rowspan=rs, columnspan=cs, sticky="wens") return R # ===== HALT et cetera ========================================================= def mkHaltArea(self, f): self.HALTframe = Frame(f) self.HALTframe.config(relief=GROOVE) self.HALTframe.config(borderwidth=2) self.HALTbutton = Button(self.HALTframe, text="HALT", width=10) self.READMEbutton = Button(self.HALTframe, text="README", width=10) self.HALTbutton.config(borderwidth=2, relief=GROOVE, fg="red") self.HALTbutton.config(command=self.quit) self.READMEbutton.config(borderwidth=2, relief=GROOVE, fg="red") self.HALTbutton.pack(side=LEFT, fill=BOTH) self.READMEbutton.pack(side=RIGHT, fill=BOTH) self.HALTframe.grid(row=0, column=9, rowspan=1, columnspan=4, sticky="wens") # ============================================================================== def mkProgramControl(self, f): self.PROGRAMCONTROLframe = Frame(f) self.PROGRAMCONTROLframe.config(relief=GROOVE) self.PROGRAMCONTROLframe.config(borderwidth=2) self.runButton = Button(self.PROGRAMCONTROLframe, text="RUN", width=10) self.runButton.grid(row=0, column=0, sticky="wens", padx=29, pady=7) self.stepButton = Button(self.PROGRAMCONTROLframe, text="STEP", width=10) self.stepButton.grid(row=1, column=0, sticky="wens", padx=29, pady=5) self.noStepButton = Button(self.PROGRAMCONTROLframe, text="NOSTEP", width=10) self.noStepButton.grid(row=2, column=0, sticky="wens", padx=29, pady=7) self.PROGRAMCONTROLframe.grid(row=17, column=11, rowspan=6, columnspan=2, sticky="wens") # ============================================================================== def getPGMfileName(self): options = {'filetypes': [('pgm files', '.pgm')]} f = askopenfilename(**options) g = f.split('/') self.filenameVar.set(g[len(g) - 1]) return f def mkProgramLoad(self, f): self.PROGRAMLOADframe = Frame(f) self.PROGRAMLOADframe.config(relief=GROOVE) self.PROGRAMLOADframe.config(borderwidth=2) self.loadPGMbutton = Button(self.PROGRAMLOADframe, text="Load PGM") self.loadPGMbutton.config(width=14) self.loadPGMbutton.pack(side=LEFT, fill=BOTH, padx=20, pady=5) self.filenameVar = StringVar() self.filenameVar.set("*****.pgm") self.fileNameLabel = Label(self.PROGRAMLOADframe, textvariable=self.filenameVar) self.fileNameLabel.config(relief=GROOVE, borderwidth=2, width=17) self.fileNameLabel.pack(side=RIGHT, fill=BOTH, padx=20, pady=5) self.PROGRAMLOADframe.grid(row=15, column=9, rowspan=2, columnspan=4, sticky="wens") # ============================================================================== def mkMemory(self, f): self.MEMORYframe = Frame(f) self.MEMORYframe.config(relief=GROOVE) self.MEMORYframe.config(borderwidth=2) E = Frame(self.MEMORYframe) self.CLEAR = self.mkButton(E, "ClearMem", 0, 0) self.RANDOM = self.mkButton(E, "RandomMem", 0, 1) self.READ = self.mkButton(E, "ReadMem", 1, 0) self.WRITE = self.mkButton(E, "WriteMem", 1, 1) self.BUSTOMEM = self.mkButton(E, "BusToMem", 2, 0, 1, 2) F = Frame(self.MEMORYframe) for i in Range8: L = Label(F, textvariable=self.MEMORY[i]) L.config(relief=GROOVE, borderwidth=2, bg="black", fg="yellow", height=1) L.grid(row=0, column=i, sticky="wens", ipadx=5) E.pack(side=TOP) F.pack(side=BOTTOM) self.MEMORYframe.grid(row=18, column=9, rowspan=5, columnspan=2, sticky="wens") # ============================================================================== def mkDataBus(self, f): self.DBframe = Frame(f) self.DBframe.config(relief=GROOVE) self.DBframe.config(borderwidth=2, bg="red") self.DBframe.grid(row=0, column=0, rowspan=1, \ columnspan=9, sticky="wens") self.databusLabel = Label(self.DBframe, text="Data\nBus", width=10) self.databusLabel.pack(side=LEFT) self.DATABUSbuttons = [] for i in Range8: b = Button(self.DBframe, textvariable=self.DATABUS[i]) b.pack(side=LEFT, fill=BOTH) self.DATABUSbuttons.append(b) def mkAddressBus(self, f): self.ABframe = Frame(f) self.ABframe.config(relief=GROOVE) self.ABframe.config(borderwidth=2, bg="red") self.ABframe.grid(row=26, column=0, rowspan=1, columnspan=13, sticky="wens") self.AddressBusLabel = Label(self.ABframe, text="Address\nBus", width=12) self.AddressBusLabel.pack(side=LEFT) self.ADDRESSBUSbuttons = [] for i in Range16: b = Button(self.ABframe, textvariable=self.ADDRESSBUS[i]) b.pack(side=LEFT, fill=BOTH, ipadx=2) self.ADDRESSBUSbuttons.append(b) # ============================================================================== def mkALU(self, f): self.ALUframe = Frame(f) self.ALUframe.config(relief=GROOVE) self.ALUframe.config(borderwidth=2) self.mkFunctionChoice(self.ALUframe) self.mkStates(self.ALUframe) self.ALUframe.grid(row=23, column=9, rowspan=3, columnspan=4, sticky="wens") def mkFunctionChoice(self, f): self.FUNCTIONframe = Frame(f) self.FUNCTIONframe.config(relief=GROOVE) self.FUNCTIONframe.config(borderwidth=2) self.F0label = Label(self.FUNCTIONframe, text="F0", borderwidth=2, relief=GROOVE) self.F0label.grid(row=0, column=0, sticky="wens", padx=5) self.F1label = Label(self.FUNCTIONframe, text="F1", borderwidth=2, relief=GROOVE) self.F1label.grid(row=0, column=1, sticky="wens", padx=8) self.F2label = Label(self.FUNCTIONframe, text="F2", borderwidth=2, relief=GROOVE) self.F2label.grid(row=0, column=2, sticky="wens", padx=5) self.FUNCTIONbuttons = [] self.F0button = Button(self.FUNCTIONframe) self.F0button.config(textvariable=self.FUNCTION[0], borderwidth=2, relief=GROOVE) self.F1button = Button(self.FUNCTIONframe) self.F1button.config(textvariable=self.FUNCTION[1], borderwidth=2, relief=GROOVE) self.F2button = Button(self.FUNCTIONframe) self.F2button.config(textvariable=self.FUNCTION[2], borderwidth=2, relief=GROOVE) self.FUNCTIONbuttons.append(self.F0button) self.FUNCTIONbuttons.append(self.F1button) self.FUNCTIONbuttons.append(self.F2button) for i in Range3: self.FUNCTIONbuttons[i].grid(row=1, column=i, sticky="wens", padx=5) self.FUNCTIONframe.pack(side=LEFT, padx=8, pady=3) def mkStates(self, f): self.STATESframe = Frame(f) self.STATESframe.config(relief=GROOVE) self.STATESframe.config(borderwidth=2) self.CARRYtag = Label(self.STATESframe, text=" carry ", borderwidth=2, relief=GROOVE) self.CARRYtag.grid(row=0, column=0, padx=5, pady=2, sticky="wens") self.ZEROtag = Label(self.STATESframe, text=" zero ", borderwidth=2, relief=GROOVE) self.ZEROtag.grid(row=0, column=1, padx=5, pady=1, sticky="wens") self.SIGNtag = Label(self.STATESframe, text=" sign ", borderwidth=2, relief=GROOVE) self.SIGNtag.grid(row=0, column=2, padx=5, pady=2, sticky="wens") self.CARRY = self.mkStringVar("0") self.ZERO = self.mkStringVar("0") self.SIGN = self.mkStringVar("0") self.CARRYlabel = Label(self.STATESframe, textvariable=self.CARRY, borderwidth=2, relief=GROOVE) self.CARRYlabel.grid(row=1, column=0, padx=5, pady=2, sticky="wens") self.ZEROlabel = Label(self.STATESframe, textvariable=self.ZERO, borderwidth=2, relief=GROOVE) self.ZEROlabel.grid(row=1, column=1, padx=5, pady=1, sticky="wens") self.SIGNlabel = Label(self.STATESframe, textvariable=self.SIGN, borderwidth=2, relief=GROOVE) self.SIGNlabel.grid(row=1, column=2, padx=5, pady=2, sticky="wens") self.STATESframe.pack(side=RIGHT, padx=8, pady=3) # ============================================================================== def mkTagLabels(self, f): self.ALabel = self.mkLabel(f, "A", 1, 0) self.BLabel = self.mkLabel(f, "B", 2, 0) self.BLabel.config(bg="black", fg="yellow") self.CLabel = self.mkLabel(f, "C", 3, 0) self.CLabel.config(bg="black", fg="yellow") self.DLabel = self.mkLabel(f, "D", 4, 0) self.M1Label = self.mkLabel(f, "M1", 5, 0) self.M2Label = self.mkLabel(f, "M2", 6, 0) self.XLabel = self.mkLabel(f, "X", 7, 0) self.YLabel = self.mkLabel(f, "Y", 8, 0) self.J1Label = self.mkLabel(f, "J1", 9, 0) self.J2Label = self.mkLabel(f, "J2", 10, 0) self.PC1Label = self.mkLabel(f, "PC1", 11, 0) self.PC2Label = self.mkLabel(f, "PC2", 12, 0) self.Inc1Label = self.mkLabel(f, "Inc1", 13, 0) self.Inc2Label = self.mkLabel(f, "Inc2", 14, 0) self.IncUnit1Label = self.mkLabel(f, "IncUnit1", 15, 0) self.IncUnit2Label = self.mkLabel(f, "IncUnit2", 16, 0) self.InstLabel = self.mkLabel(f, "Inst", 17, 0) self.addLabel = self.mkLabel(f, "ADD", 18, 0) self.incLabel = self.mkLabel(f, "INC", 19, 0) self.andLabel = self.mkLabel(f, "AND", 20, 0) self.orLabel = self.mkLabel(f, "OR", 21, 0) self.xorLabel = self.mkLabel(f, "XOR", 22, 0) self.notLabel = self.mkLabel(f, "NOT", 23, 0) self.shlLabel = self.mkLabel(f, "SHL", 24, 0) self.clrLabel = self.mkLabel(f, "CLR", 25, 0) self.functionTagLabelDictionary = { (0,0,0) : self.addLabel, \ (0,0,1) : self.incLabel, \ (0,1,0) : self.andLabel, \ (0,1,1) : self.orLabel, \ (1,0,0) : self.xorLabel, \ (1,0,1) : self.notLabel, \ (1,1,0) : self.shlLabel, \ (1,1,1) : self.clrLabel \ } for i in self.functionTagLabelDictionary.values(): i.config(bg="black", fg="yellow") # ============================================================================== def mkRegisterStringVars(self): self.FUNCTION = [self.mkStringVar("0") for unused_i in Range3] self.DATABUS = [self.mkStringVar("0") for unused_i in Range8] self.Inst = [self.mkStringVar("0") for unused_i in Range8] self.A = [self.mkStringVar("0") for unused_i in Range8] self.B = [self.mkStringVar("0") for unused_i in Range8] self.C = [self.mkStringVar("0") for unused_i in Range8] self.D = [self.mkStringVar("0") for unused_i in Range8] self.M1 = [self.mkStringVar("0") for unused_i in Range8] self.M2 = [self.mkStringVar("0") for unused_i in Range8] self.X = [self.mkStringVar("0") for unused_i in Range8] self.Y = [self.mkStringVar("0") for unused_i in Range8] self.J1 = [self.mkStringVar("0") for unused_i in Range8] self.J2 = [self.mkStringVar("0") for unused_i in Range8] self.PC1 = [self.mkStringVar("0") for unused_i in Range8] self.PC2 = [self.mkStringVar("0") for unused_i in Range8] self.Inc1 = [self.mkStringVar("0") for unused_i in Range8] self.Inc2 = [self.mkStringVar("0") for unused_i in Range8] self.IncUnit1 = [self.mkStringVar("0") for unused_i in Range8] self.IncUnit2 = [self.mkStringVar("0") for unused_i in Range8] self.Add = [self.mkStringVar("0") for unused_i in Range8] self.Inc = [self.mkStringVar("0") for unused_i in Range8] self.And = [self.mkStringVar("0") for unused_i in Range8] self.Or = [self.mkStringVar("0") for unused_i in Range8] self.Xor = [self.mkStringVar("0") for unused_i in Range8] self.Not = [self.mkStringVar("0") for unused_i in Range8] self.Shl = [self.mkStringVar("0") for unused_i in Range8] self.Clr = [self.mkStringVar("0") for unused_i in Range8] self.ADDRESSBUS = [self.mkStringVar("0") for unused_i in Range16] self.MEMORY = [self.mkStringVar("0") for unused_i in Range8] # ============================================================================== def setRegisterLabelColor(self, L, bc, fc="black"): for i in L: i.config(bg=bc, fg=fc) def mkRegisterLabels(self, f): self.Alabels = self.mkLabelList(f, self.A, 1) self.setRegisterLabelColor(self.Alabels, "gray90") self.Blabels = self.mkLabelList(f, self.B, 2) self.setRegisterLabelColor(self.Blabels, "black", "yellow") self.Clabels = self.mkLabelList(f, self.C, 3) self.setRegisterLabelColor(self.Clabels, "black", "yellow") self.Dlabels = self.mkLabelList(f, self.D, 4) self.setRegisterLabelColor(self.Dlabels, "gray90") self.M1labels = self.mkLabelList(f, self.M1, 5) self.setRegisterLabelColor(self.M1labels, "gray90") self.M2labels = self.mkLabelList(f, self.M2, 6) self.setRegisterLabelColor(self.M2labels, "gray90") self.Xlabels = self.mkLabelList(f, self.X, 7) self.setRegisterLabelColor(self.Xlabels, "gray90") self.Ylabels = self.mkLabelList(f, self.Y, 8) self.setRegisterLabelColor(self.Ylabels, "gray90") self.J1labels = self.mkLabelList(f, self.J1, 9) self.J2labels = self.mkLabelList(f, self.J2, 10) self.PC1labels = self.mkLabelList(f, self.PC1, 11) self.PC2labels = self.mkLabelList(f, self.PC2, 12) self.Inc1labels = self.mkLabelList(f, self.Inc1, 13) self.setRegisterLabelColor(self.Inc1labels, "gray95") self.Inc2labels = self.mkLabelList(f, self.Inc2, 14) self.setRegisterLabelColor(self.Inc2labels, "gray95") self.IncUnit1labels = self.mkLabelList(f, self.IncUnit1, 15) self.setRegisterLabelColor(self.IncUnit1labels, "gray95") self.IncUnit2labels = self.mkLabelList(f, self.IncUnit2, 16) self.setRegisterLabelColor(self.IncUnit2labels, "gray95") self.Instlabels = self.mkLabelList(f, self.Inst, 17) self.addlabels = self.mkLabelList(f, self.Add, 18) self.setRegisterLabelColor(self.addlabels, "black", "red") self.inclabels = self.mkLabelList(f, self.Inc, 19) self.setRegisterLabelColor(self.inclabels, "black", "yellow") self.andlabels = self.mkLabelList(f, self.And, 20) self.setRegisterLabelColor(self.andlabels, "black", "yellow") self.orlabels = self.mkLabelList(f, self.Or, 21) self.setRegisterLabelColor(self.orlabels, "black", "yellow") self.xorlabels = self.mkLabelList(f, self.Xor, 22) self.setRegisterLabelColor(self.xorlabels, "black", "yellow") self.notlabels = self.mkLabelList(f, self.Not, 23) self.setRegisterLabelColor(self.notlabels, "black", "yellow") self.shllabels = self.mkLabelList(f, self.Shl, 24) self.setRegisterLabelColor(self.shllabels, "black", "yellow") self.clrlabels = self.mkLabelList(f, self.Clr, 25) self.setRegisterLabelColor(self.clrlabels, "black", "yellow") self.functionLabelsDictionary = { (0,0,0) : self.addlabels, \ (0,0,1) : self.inclabels, \ (0,1,0) : self.andlabels, \ (0,1,1) : self.orlabels, \ (1,0,0) : self.xorlabels, \ (1,0,1) : self.notlabels, \ (1,1,0) : self.shllabels, \ (1,1,1) : self.clrlabels \ } # ===== Load & Select ========================================================== def mkLoad8Buttons(self, f): self.loadA = self.mkButton(f, "load A", 1, 9, 1, 2) self.loadB = self.mkButton(f, "load B", 2, 9, 1, 2) self.loadC = self.mkButton(f, "load C", 3, 9, 1, 2) self.loadD = self.mkButton(f, "load D", 4, 9, 1, 2) self.loadM1 = self.mkButton(f, "load M1", 5, 9, 1, 2) self.loadM2 = self.mkButton(f, "load M2", 6, 9, 1, 2) self.loadX = self.mkButton(f, "load X", 7, 9) self.loadY = self.mkButton(f, "load Y", 8, 9) self.loadJ1 = self.mkButton(f, "load J1", 9, 9, 1, 2) self.loadJ2 = self.mkButton(f, "load J2", 10, 9, 1, 2) self.loadInst = self.mkButton(f, "load Inst", 17, 9, 1, 2) def mkLoad16Buttons(self, f): self.loadXY = self.mkButton(f, "load XY", 7, 10, 2, 1) self.loadPC = self.mkButton(f, "load PC", 11, 9, 2, 2) self.loadINC = self.mkButton(f, "load INC", 13, 9, 2, 2) def mkSelect8Buttons(self, f): self.selectA = self.mkButton(f, "select A", 1, 11, 1, 2) self.selectB = self.mkButton(f, "select B", 2, 11, 1, 2) self.selectC = self.mkButton(f, "select C", 3, 11, 1, 2) self.selectD = self.mkButton(f, "select D", 4, 11, 1, 2) self.selectM1 = self.mkButton(f, "select M1", 5, 11) self.selectM2 = self.mkButton(f, "select M2", 6, 11) self.selectX = self.mkButton(f, "select X", 7, 11) self.selectY = self.mkButton(f, "select Y", 8, 11) def mkSelect16Buttons(self, f): self.selectM = self.mkButton(f, "select M", 5, 12, 2, 1) self.selectXY = self.mkButton(f, "select XY", 7, 12, 2, 1) self.selectJ = self.mkButton(f, "select J", 9, 11, 2, 2) self.selectPC = self.mkButton(f, "select PC", 11, 11, 2, 2) self.selectINC = self.mkButton(f, "select INC", 13, 11, 2, 2) # ===== System Messages ======================================================== def mkMessageArea(self, f): self.text = Text(f, height=36, width=64) self.text.configure(font=("Courier", 11, "bold"), bg="black", fg="green") self.scroll = Scrollbar(f, command=self.text.yview) self.text.configure(yscrollcommand=self.scroll.set) self.text.pack(side=LEFT, padx=3, pady=2) self.scroll.pack(side=RIGHT, fill=Y, padx=3, pady=2) def addText(self, text): self.text.insert(END, text + "\n") self.text.yview(END) # ===== Initialization ========================================================= def __init__(self): Tk.__init__(self) self.title("Virtual Machine") self.config(bg="blue") self.registers = LabelFrame(self, bg="blue") self.registers.config(relief=GROOVE) self.registers.config(borderwidth=2) self.registers.config(text="Virtual Machine: controls and states") self.registers.config(labelanchor="nw") self.registers.pack(side=LEFT, fill=BOTH) self.mkRegisterStringVars() self.mkTagLabels(self.registers) self.mkDataBus(self.registers) self.mkRegisterLabels(self.registers) self.mkLoad8Buttons(self.registers) self.mkLoad16Buttons(self.registers) self.mkSelect8Buttons(self.registers) self.mkSelect16Buttons(self.registers) self.mkAddressBus(self.registers) self.mkALU(self.registers) self.mkMemory(self.registers) self.mkProgramLoad(self.registers) self.mkProgramControl(self.registers) self.mkHaltArea(self.registers) self.messages = LabelFrame(self, bg="blue") self.messages.config(relief=GROOVE) self.messages.config(borderwidth=2) self.messages.config(text="Virtual Machine: system messages") self.messages.config(labelanchor="nw") self.messages.pack(side=RIGHT, fill=BOTH) self.mkMessageArea(self.messages)
class tkLicenseGen: def __init__(self, master): master.title('Univention Lizenz Generator') self.master = master self.logoframe = Frame(self.master, bg='red') self.logoframe.pack(side=TOP, fill=X, expand=YES) self.lftopframes = LabelFrame(self.master) self.lftopframes.pack(side=TOP, fill=X, expand=YES) self.lframe = Frame(self.lftopframes) self.rframe = Frame(self.lftopframes) self.lframe.pack(side=LEFT, fill=X, expand=YES) self.rframe.pack(side=RIGHT, fill=X, expand=YES) self.bframe = Frame(self.master) self.bframe.pack(fill=X) self.kname = StringVar() self.kname.set('test') self.chkevar = IntVar() self.chkevar.set('1') self.chkivar = IntVar() self.chkovar = IntVar() self.chkdvar = IntVar() self.exday = StringVar() self.exmonth = StringVar() self.exyear = StringVar() self.getdate() # set date to localdate (month+3) try: self.logo = PhotoImage(file='/var/www/head_logo.gif') except TclError: # fall back to 64x64 white self.logo = PhotoImage(data='R0lGODdhQABAAIAAAP///wAAACwAAAAAQABAAAACRYSPqcvtD6OctNqLs968+w+G4kiW5omm6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNarfcrhdQAAA7') # self.logo.pack() #muss man nicht packen??!! self.logolabel = Label(self.logoframe, image=self.logo, bg='#CC3300') self.logolabel.pack(side=LEFT, fill=X, expand=YES) self.lfname = LabelFrame(self.lframe, font=("Helvetica", 11), text='Kundenname:') self.lfname.pack(fill=X) self.ekname = Entry(self.lfname, textvariable=self.kname, width=30) self.ekname.pack(side=LEFT) self.lfdate = LabelFrame(self.lframe, font=("Helvetica", 11), text='Ablaufdatum (TT/MM/JJ):') self.lfdate.pack(fill=X) self.eexd = Entry(self.lfdate, textvariable=self.exday, width=2) self.eexd.pack(side=LEFT) self.eexm = Entry(self.lfdate, textvariable=self.exmonth, width=2) self.eexm.pack(side=LEFT) self.eexy = Entry(self.lfdate, textvariable=self.exyear, width=2) self.eexy.pack(side=LEFT) self.chkdate = Checkbutton(self.lfdate, text='Unbeschränkt', variable=self.chkdvar) self.chkdate.pack(side=RIGHT) self.lfchke = LabelFrame(self.lframe, font=("Helvetica", 11), text='Evaluationslizenz:') self.lfchke.pack(fill=X) self.chke = Checkbutton(self.lfchke, variable=self.chkevar) self.chke.pack(side=LEFT) self.lfchki = LabelFrame(self.lframe, font=("Helvetica", 11), text='Interne Lizenz:') self.lfchki.pack(fill=X) self.chki = Checkbutton(self.lfchki, variable=self.chkivar) self.chki.pack(side=LEFT) self.lfchko = LabelFrame(self.lframe, font=("Helvetica", 11), text='Altes Lizenzformat (vor 1.2-3):') self.lfchko.pack(fill=X) self.chko = Checkbutton(self.lfchko, variable=self.chkovar, command=self.makegrey) self.chko.pack(side=LEFT) self.kdn = StringVar() self.kdn.set('dc=univention,dc=de') self.lfdn = LabelFrame(self.rframe, font=("Helvetica", 11), text='Kunde DN:') self.lfdn.pack(fill=X) self.ekdn = Entry(self.lfdn, textvariable=self.kdn, width=30) self.ekdn.pack(side=LEFT) self.kmaxacc = IntVar() self.kmaxacc.set('999') self.kmaxgacc = IntVar() self.kmaxgacc.set('999') self.kmaxcli = IntVar() self.kmaxcli.set('999') self.kmaxdesk = IntVar() self.kmaxdesk.set('999') self.chkmaxaccvar = IntVar() self.chkmaxaccvar.set('0') self.chkmaxgaccvar = IntVar() self.chkmaxgaccvar.set('0') self.chkmaxclivar = IntVar() self.chkmaxclivar.set('0') self.chkmaxdeskvar = IntVar() self.chkmaxdeskvar.set('0') self.lfmaxacc = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Accounts:') self.lfmaxacc.pack(fill=X) self.lfmaxgacc = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Groupware Accounts:') self.lfmaxgacc.pack(fill=X) self.lfmaxcli = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Clients:') self.lfmaxcli.pack(fill=X) self.lfmaxdesk = LabelFrame(self.rframe, font=("Helvetica", 11), text='Max. Univention Desktops:') self.lfmaxdesk.pack(fill=X) self.emaxacc = Entry(self.lfmaxacc, textvariable=self.kmaxacc) self.emaxacc.pack(side=LEFT) self.chkmaxacc = Checkbutton(self.lfmaxacc, text='Unbeschränkt', variable=self.chkmaxaccvar) self.chkmaxacc.pack(side=LEFT) self.emaxgacc = Entry(self.lfmaxgacc, textvariable=self.kmaxgacc) self.emaxgacc.pack(side=LEFT) self.chkmaxgacc = Checkbutton(self.lfmaxgacc, text='Unbeschränkt', variable=self.chkmaxgaccvar) self.chkmaxgacc.pack(side=LEFT) self.emaxcli = Entry(self.lfmaxcli, textvariable=self.kmaxcli) self.emaxcli.pack(side=LEFT) self.chkmaxcli = Checkbutton(self.lfmaxcli, text='Unbeschränkt', variable=self.chkmaxclivar) self.chkmaxcli.pack(side=LEFT) self.emaxdesk = Entry(self.lfmaxdesk, textvariable=self.kmaxdesk) self.emaxdesk.pack(side=LEFT) self.chkmaxdesk = Checkbutton(self.lfmaxdesk, text='Unbeschränkt', variable=self.chkmaxdeskvar) self.chkmaxdesk.pack(side=LEFT) self.bexit = Button(self.bframe, text='Beenden', command=self.quit) self.bexit.pack(side=RIGHT) self.bsave = Button(self.bframe, text='Lizenz erzeugen', command=self.generate) self.bsave.pack(side=RIGHT) def generate(self): makelicense = ['univention_make_license'] path = tkFileDialog.asksaveasfilename(initialdir='~', initialfile=self.kname.get() + '-license', defaultextension='.ldif') # print path if path: if self.chkevar.get(): makelicense.append('-e') if self.chkivar.get(): makelicense.append('-i') makelicense.append('-f') makelicense.append(path) if not self.chkdvar.get(): makelicense.append('-d') makelicense.append("%s/%s/%s" % (self.exmonth.get(), self.exday.get(), self.exyear.get())) if not self.chkovar.get(): if not self.chkmaxaccvar.get(): makelicense.append('-a') makelicense.append('%d' % self.kmaxacc.get()) else: makelicense.append('-a') makelicense.append('unlimited') if not self.chkmaxgaccvar.get(): makelicense.append('-g') makelicense.append('%d' % self.kmaxgacc.get()) else: makelicense.append('-g') makelicense.append('unlimited') if not self.chkmaxclivar.get(): makelicense.append('-c') makelicense.append('%d' % self.kmaxcli.get()) else: makelicense.append('-c') makelicense.append('unlimited') if not self.chkmaxdeskvar.get(): makelicense.append('-u') makelicense.append('%d' % self.kmaxdesk.get()) else: makelicense.append('-u') makelicense.append('unlimited') else: makelicense.append('-o') makelicense.append(self.kname.get()) makelicense.append(self.kdn.get()) os.chdir('/home/groups/99_license/') p = subprocess.Popen(makelicense, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout, stderr = p.communicate() if p.returncode == 0: showinfo('Lizenz Erstellt!', 'Die Lizenz für %s wurde erfolgreich erstellt!' % self.kname.get()) elif p.returncode == 257: showerror('Fehler', 'Errorcode: "%s"\nEvtl. sind Sie nicht in dem Sudoers File!' % p.returncode) elif p.returncode == 8704: showerror('Fehler', 'Errorcode: "%s"\nmake_license.sh meldet: "invalid DN"!' % p.returncode) else: print >>sys.stderr, '%r\n%s' % (makelicense, stdout) showerror('Fehler', 'Errorcode: "%s"\nEin unbekannter Fehler ist aufgetreten!\nBitte senden Sie eine komplette Fehlerbeschreibung an "*****@*****.**"' % p.returncode) # print makelicense # print '-->ErrorCode: %d'%i[0] # print i[1] def getdate(self): localtime = time.strftime('%d %m %y') split = localtime.split(' ') day = int(split[0]) month = int(split[1]) year = int(split[2]) month += 3 if month > 12: month = month - 12 year += 1 if day < 10: day = '0' + str(day) if month < 10: month = '0' + str(month) if year < 10: year = '0' + str(year) self.exday.set(day) self.exmonth.set(month) self.exyear.set(year) def makegrey(self): pass def quit(self, event=None): self.master.quit()
def __init__(self, app, printer, settings, logger, *arg): self.app = app self.printer = printer self.settings = settings self.logger = logger self.afterID = None self.selection = None if not self.app.printing: self.logger.logMsg("Report only available while printing") return Toplevel.__init__(self, app, *arg) self.title("Layer by Layer Timing") self.protocol("WM_DELETE_WINDOW", self.doCancel) fUL = Frame(self) fUL.grid(row=1, column=1, rowspan=2, padx=10) l = Label(fUL, text="Choose layer:") l.pack() lbf = Frame(fUL) lbf.pack() self.lbLayers = Listbox(lbf) self.lbLayers.bind("<ButtonRelease-1>", self.clickLayers) self.sb = Scrollbar(lbf, orient=VERTICAL) self.sb.config(command=self.lbLayers.yview) self.lbLayers.config(yscrollcommand=self.sb.set) self.sb.pack(side=RIGHT, fill=Y) self.lbLayers.pack(side=LEFT, fill=BOTH, expand=1) rbf = LabelFrame(fUL, text="Time Format") rbf.pack() self.rbvTimeFmt = StringVar() self.rbvTimeFmt.set(TIME_WALL) rb = Radiobutton(rbf, text="Wall time", variable=self.rbvTimeFmt, value=TIME_WALL, command=self.doTimeFormat) rb.pack(anchor=W) rb = Radiobutton(rbf, text="From start", variable=self.rbvTimeFmt, value=TIME_START, command=self.doTimeFormat) rb.pack(anchor=W) rb = Radiobutton(rbf, text="From now", variable=self.rbvTimeFmt, value=TIME_NOW, command=self.doTimeFormat) rb.pack(anchor=W) fUR = Frame(self) fUR.grid(row=1, column=2, rowspan=2, padx=10) row = 1 lf = LabelFrame(fUR, text="Print Times: ") lf.grid(row=row, column=1) l = Label(lf, text="Start: ", width=12, justify=RIGHT) l.grid(row=1, column=1, padx=10, sticky=E) self.timePStart = Label(lf, text="", anchor=W, justify=LEFT) self.timePStart.grid(row=1, column=3, padx=10) l = Label(lf, text="Elapsed: ", width=12, justify=RIGHT) l.grid(row=2, column=1, padx=10, sticky=E) self.timeElapsed = Label(lf, text="", anchor=W, justify=LEFT) self.timeElapsed.grid(row=2, column=3, padx=10) l = Label(lf, text="Current: ", width=12, justify=RIGHT) l.grid(row=3, column=1, padx=10, sticky=E) self.timeNow = Label(lf, text="", anchor=W, justify=LEFT) self.timeNow.grid(row=3, column=3, padx=10) row += 1 lf = LabelFrame(fUR, text="Layer Start Time: ") lf.grid(row=row, column=1) l = Label(lf, text="original: ", width=12, justify=RIGHT) l.grid(row=1, column=1, padx=10, sticky=E) self.timeOStart = Label(lf, text="", anchor=W, justify=LEFT) self.timeOStart.grid(row=1, column=2, padx=10) l = Label(lf, text="revised: ", width=12, justify=RIGHT) l.grid(row=2, column=1, padx=10, sticky=E) self.timeRStart = Label(lf, text="", anchor=W, justify=LEFT) self.timeRStart.grid(row=2, column=2, padx=10) row += 1 lf = LabelFrame(fUR, text="Time in Layer: ") lf.grid(row=row, column=1) l = Label(lf, text="original: ", width=12, justify=RIGHT) l.grid(row=1, column=2, padx=10, sticky=E) self.timeOLayer = Label(lf, text="", anchor=W, justify=LEFT) self.timeOLayer.grid(row=1, column=3, padx=10) l = Label(lf, text="revised: ", width=12, justify=RIGHT) l.grid(row=2, column=2, padx=10, sticky=E) self.timeRLayer = Label(lf, text="", anchor=W, justify=LEFT) self.timeRLayer.grid(row=2, column=3, padx=10) row += 1 lf = LabelFrame(fUR, text="Layer Finish Time: ") lf.grid(row=row, column=1) l = Label(lf, text="original: ", width=12, justify=RIGHT) l.grid(row=1, column=2, padx=10, sticky=E) self.timeOFinish = Label(lf, text="", anchor=W, justify=LEFT) self.timeOFinish.grid(row=1, column=3, padx=10) l = Label(lf, text="revised: ", width=12, justify=RIGHT) l.grid(row=2, column=2, padx=10, sticky=E) self.timeRFinish = Label(lf, text="", anchor=W, justify=LEFT) self.timeRFinish.grid(row=2, column=3, padx=10) self.ticker()
def initUI(self): self.parent.title("IAF CALC 0.01") self.pack(fill=BOTH, expand=1) self.configure(background='white') frameTOP = Frame(self) frameTOP.config(bg="white") frameTOP.pack(side=TOP) frameFILES = Frame(frameTOP) frameFILES.pack(side=LEFT, padx=10) # --- BUTTON FOR FILE 1 --- # frameF1 = LabelFrame(frameFILES, text="Eyes open file:", relief=FLAT, borderwidth=1, background="white") frameF1.pack(fill=X, expand=1) self.nameF1 = Entry(frameF1, width=50) self.nameF1.config(bg="lightgray") self.nameF1.pack(side=LEFT) self.nameF1.delete(0, END) self.nameF1.insert(0, "") self.buttonLoadFile1 = Button(frameF1, text="...", command=self.askOpenFile1) self.buttonLoadFile1.pack(side=LEFT, padx=5, pady=5) # ----------------------- # # --- BUTTON FOR FILE 2 --- # frameF2 = LabelFrame(frameFILES, text="Eyes closed file:", relief=FLAT, borderwidth=1, background="white") frameF2.pack(fill=X, expand=1) self.nameF2 = Entry(frameF2, width=50) self.nameF2.config(bg="lightgray") self.nameF2.pack(side=LEFT) self.nameF2.delete(0, END) self.nameF2.insert(0, "") self.buttonLoadFile2 = Button(frameF2, text="...", command=self.askOpenFile2) self.buttonLoadFile2.pack(side=LEFT, padx=5, pady=5) # ----------------------- # # --- BUTTON FOR FILE OUTPUT --- # frameO = LabelFrame(frameFILES, text="Output directory:", relief=FLAT, borderwidth=1, background="white") frameO.pack(fill=X, expand=1) self.nameO = Entry(frameO, width=50) self.nameO.config(bg="lightgray") self.nameO.pack(side=LEFT) self.nameO.delete(0, END) self.nameO.insert(0, "") self.buttonSelectOutput = Button(frameO, text="...", command=self.askOutputDirectory) self.buttonSelectOutput.pack(side=LEFT, padx=5, pady=5) # -------------------------------# # self.pack() # self.pack(fill=Y, expand=1) # ---------- PSD PARAMETER SELECTION ---------- # framePARAM = Frame(frameTOP) framePARAM.config(bg="white") framePARAM.pack(side=LEFT, fill=X) frame = LabelFrame(framePARAM, text="PSD Parameters", relief=RIDGE, borderwidth=1, background="white") frame.pack(fill=BOTH, expand=1, side=TOP) wFs = Label(frame, text="Fs:", bg="white") wFs.pack(side=LEFT) self.inputFs = Entry(frame, width=5) self.inputFs.pack(side=LEFT, padx=5) self.inputFs.delete(0, END) self.inputFs.insert(0, "500") wWS = Label(frame, text="Window size:", bg="white") wWS.pack(side=LEFT) self.inputWinSize = Entry(frame, width=5) self.inputWinSize.pack(side=LEFT, padx=5) self.inputWinSize.delete(0, END) self.inputWinSize.insert(0, "1024") wOL = Label(frame, text="Overlap:", bg="white") wOL.pack(side=LEFT) self.inputOverlap = Entry(frame, width=5) self.inputOverlap.pack(side=LEFT, padx=5) self.inputOverlap.delete(0, END) self.inputOverlap.insert(0, "512") wWT = Label(frame, text="Window function:", bg="white") wWT.pack(side=LEFT) variable = StringVar(frame) variable.set("Hamming") # default value self.inputWinType = OptionMenu(frame, variable, "Hamming", "Bartlett", "Blackman", "Hanning", "None") self.inputWinType.config(bg="white", width=10) self.inputWinType.pack(side=LEFT) buttonRun = Button(frame, text="GO!", command=self.goTime) buttonRun.pack(side=RIGHT) # Channel selector frameCh = LabelFrame(framePARAM, text="Channels", relief=RIDGE, borderwidth=1, background="white") frameCh.pack(fill=BOTH, expand=1, side=TOP) self.EOch1 = IntVar() self.inputEOch1 = Checkbutton(frameCh, text="1", variable=self.EOch1, bg="white") self.inputEOch1.pack(side=LEFT) self.EOch2 = IntVar() self.inputEOch2 = Checkbutton(frameCh, text="2", variable=self.EOch2, bg="white") self.inputEOch2.pack(side=LEFT) self.EOch3 = IntVar() self.inputEOch3 = Checkbutton(frameCh, text="3", variable=self.EOch3, bg="white") self.inputEOch3.pack(side=LEFT) self.EOch4 = IntVar() self.inputEOch4 = Checkbutton(frameCh, text="4", variable=self.EOch4, bg="white") self.inputEOch4.pack(side=LEFT) self.EOch5 = IntVar() self.inputEOch5 = Checkbutton(frameCh, text="5", variable=self.EOch5, bg="white") self.inputEOch5.pack(side=LEFT) self.EOch6 = IntVar() self.inputEOch6 = Checkbutton(frameCh, text="6", variable=self.EOch6, bg="white") self.inputEOch6.pack(side=LEFT) self.EOch7 = IntVar() self.inputEOch7 = Checkbutton(frameCh, text="7", variable=self.EOch7, bg="white") self.inputEOch7.pack(side=LEFT) self.EOch8 = IntVar() self.inputEOch8 = Checkbutton(frameCh, text="8", variable=self.EOch8, bg="white") self.inputEOch8.pack(side=LEFT) # IAF Calculation parameters frameIAF = LabelFrame(framePARAM, text="IAF Search Limits", relief=RIDGE, borderwidth=1, background="white") frameIAF.pack(fill=BOTH, expand=1, side=TOP) labelLowBound = Label(frameIAF, text="Lower limit (Hz):", bg="white") labelLowBound.pack(side=LEFT) self.inputLowBound = Entry(frameIAF, width=5) self.inputLowBound.pack(side=LEFT, padx=5) self.inputLowBound.delete(0, END) self.inputLowBound.insert(0, "7") labelUpBound = Label(frameIAF, text="Upper limit (Hz):", bg="white") labelUpBound.pack(side=LEFT) self.inputUpBound = Entry(frameIAF, width=5) self.inputUpBound.pack(side=LEFT, padx=5) self.inputUpBound.delete(0, END) self.inputUpBound.insert(0, "14") self.GaussVar = IntVar() self.inputGauss = Checkbutton(frameIAF, text="Gauss", variable=self.GaussVar, bg="white") self.inputGauss.pack(side=LEFT) buttonRun = Button(frameIAF, text="IAF!", command=self.calculateIAF) buttonRun.pack(side=RIGHT) self.pack() # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # END OF TOP FRAME # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # my variables self.chSelect = 0 self.chOther = 0 self.P1 = ndarray(1) self.f1 = ndarray(1) self.P2 = ndarray(1) self.f2 = ndarray(1) self.filename1 = "..." self.filename2 = "..." self.IAF = 10 self.doGauss = True # FIGURE STUFF !!! self.Pmax = 0 self.Pmin = 0 self.Dmax = 0 self.Dmin = 0 frameBOTTOM = Frame(self) frameBOTTOM.config(bg="white") frameBOTTOM.pack(side=BOTTOM, pady=10) frameFig = LabelFrame(frameBOTTOM, text="Spectrum", relief=RIDGE, borderwidth=1, background="white") frameFig.pack(fill=X, expand=1, side=LEFT, padx=10) self.fig1 = matplotlib.figure.Figure(figsize=(7, 3), dpi=100) #,frameon=False) self.fig1.set_facecolor('white') self.fig = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg( self.fig1, master=frameFig) self.a1 = self.fig1.add_subplot(121) self.a2 = self.fig1.add_subplot(122) self.fig.show() self.fig.get_tk_widget().pack(side=BOTTOM) frameConfig = LabelFrame(frameBOTTOM, text="Filter configuration", relief=RAISED, borderwidth=1, background="white") frameConfig.pack(fill=BOTH, expand=1, side=RIGHT, padx=10) frameIAF = LabelFrame(frameConfig, text="Individual Alpha Frequency (IAF)") frameIAF.config(bg="white") frameIAF.pack(expand=1, side=TOP, padx=10) self.inputIAF = Entry(frameIAF, width=5) self.inputIAF.pack(side=LEFT, padx=5) self.inputIAF.delete(0, END) self.inputIAF.insert(0, "0") self.buttonWriteDefault = Button(frameIAF, text="Update Filters", command=self.updateFilters) self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5) frameFilters = LabelFrame(frameConfig, text="Filters", relief=RAISED, borderwidth=1, background="white") frameFilters.pack(fill=X, expand=1, side=TOP) # THETA FRAME frameTheta = LabelFrame(frameFilters, text="Theta", relief=RAISED, borderwidth=1, background="white") frameTheta.pack(expand=1, side=TOP, pady=5, padx=5) self.inputThetaLow = Entry(frameTheta, width=8) self.inputThetaLow.pack(side=LEFT, padx=5, pady=5) self.inputThetaLow.delete(0, END) self.inputThetaLow.insert(0, "0") self.inputThetaHigh = Entry(frameTheta, width=8) self.inputThetaHigh.pack(side=LEFT, padx=5, pady=5) self.inputThetaHigh.delete(0, END) self.inputThetaHigh.insert(0, "0") # BETA FRAME frameBeta = LabelFrame(frameFilters, text="Beta", relief=RAISED, borderwidth=1, background="white") frameBeta.pack(expand=1, side=TOP, pady=5, padx=5) self.inputBetaLow = Entry(frameBeta, width=8) self.inputBetaLow.pack(side=LEFT, padx=5, pady=5) self.inputBetaLow.delete(0, END) self.inputBetaLow.insert(0, "0") self.inputBetaHigh = Entry(frameBeta, width=8) self.inputBetaHigh.pack(side=LEFT, padx=5, pady=5) self.inputBetaHigh.delete(0, END) self.inputBetaHigh.insert(0, "0") # SMR FRAME frameSMR = LabelFrame(frameFilters, text="SMR", relief=RAISED, borderwidth=1, background="white") frameSMR.pack(expand=1, side=TOP, pady=5, padx=5) self.inputSMRLow = Entry(frameSMR, width=8) self.inputSMRLow.pack(side=LEFT, padx=5, pady=5) self.inputSMRLow.delete(0, END) self.inputSMRLow.insert(0, "0") self.inputSMRHigh = Entry(frameSMR, width=8) self.inputSMRHigh.pack(side=LEFT, padx=5, pady=5) self.inputSMRHigh.delete(0, END) self.inputSMRHigh.insert(0, "0") frameButtons = LabelFrame(frameConfig, text="Commands", relief=RAISED, borderwidth=1, background="white") frameButtons.pack(expand=1, side=BOTTOM) self.buttonWriteConfig = Button(frameButtons, text="Write Filters", command=self.writeFilters) self.buttonWriteConfig.pack(side=LEFT, padx=5, pady=5) self.buttonWriteDefault = Button(frameButtons, text="Reset to Defaults", command=self.resetIAFtoDefault) self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5) # self.buttonVisualize = Button(frameButtons, text="VIS",command=self.resetIAFtoDefault) # self.buttonVisualize.pack(side=LEFT,padx=5,pady=5) self.buttonPrintFig = Button(frameButtons, text="Print Figure", command=self.printFigureToFile) self.buttonPrintFig.pack(side=LEFT, padx=5, pady=5)
def __init__(self, master): # Master Window self.master = master NUMLINES = 32 BOXWIDTH = 42 BUTTONWIDTH = 24 CHECKWIDTH = 24 BUTTONPAD = 12 BG_COLOR1 = 'black' # Input Box BG_COLOR2 = '#301313' # Output Box BG_COLOR3 = '#131313' BG_COLOR4 = '#333333' BG_COLOR5 = '#433333' # Text FG_COLOR1 = 'white' FG_COLOR1 = 'grey' BD_COLOR1 = '#120000' FIELD_WIDTH = 9 # Delimiter Options # Display, characterString global MODES DELIMITERS = list(MODES.keys()) # Date String options DATEFORMATS = { 'YMDhm', 'YMD_hm', 'D/M/Y', 'D/M/Y h:m:s', 'D/M/Y h:m', 'Y-M-D', 'Y-M-D h:m:s', 'Y-M-D h:m' } # Initialize the source text. source_text_on_load = StringVar() source_text_on_load.set(self.getClipboard()) source_text = StringVar() source_text.set(source_text_on_load.get()) output_text = StringVar() output_text.set('') src_delimiter = StringVar() src_delimiter.set('\n') out_delimiter = StringVar() out_delimiter.set(',') out_quote = StringVar() out_quote.set('') prefix = StringVar() prefix.set('') suffix = StringVar() suffix.set('') find_text = StringVar() find_text.set('') replace_text = StringVar() replace_text.set('') capitalize = BooleanVar() remove_empty = BooleanVar() order_alpha = BooleanVar() unique_only = BooleanVar() skip_header = BooleanVar() capitalize.set(0) remove_empty.set(0) order_alpha.set(0) unique_only.set(0) skip_header.set(0) date_format = StringVar() date_format.set('YMDhm') ################## # NOTEBOOK 1 ################ ################# # TOP ################ top_frame = Frame(root, bg='', width=36, height=260, pady=3, padx=3) top_frame.pack() line_numbers = StringVar() for i in range(0, NUMLINES): line_numbers.set(line_numbers.get() + str(i + 1) + '\n') # Source Text Box source_text_frame = LabelFrame(top_frame, text='Source', fg=FG_COLOR1, bg=BD_COLOR1, width=20, height=400, pady=3, padx=3) source_text_frame.grid(row=0, column=1, sticky="nw") src_txt_line_numbers = Label(source_text_frame, textvar=line_numbers, fg=FG_COLOR1, bg=BG_COLOR4, anchor='ne', justify='right', width=2, height=NUMLINES, relief='raised') src_txt_line_numbers.grid(row=0, column=0) src_txt_box = Label(source_text_frame, textvar=source_text, fg=FG_COLOR1, bg=BG_COLOR3, anchor='nw', justify='left', wraplength=320, width=BOXWIDTH, height=NUMLINES, relief='raised') src_txt_box.grid(row=0, column=1) # Output Text Box output_text_frame = LabelFrame(top_frame, text='Output', fg=FG_COLOR1, bg=BD_COLOR1, width=20, height=400, pady=3, padx=3) output_text_frame.grid(row=0, column=3, sticky="ne") out_txt_box = Label(output_text_frame, textvar=line_numbers, fg=FG_COLOR1, bg=BG_COLOR5, anchor='ne', justify='right', width=2, height=NUMLINES, relief='raised') out_txt_box.grid(row=0, column=0) out_txt_box = Label(output_text_frame, textvar=output_text, fg=FG_COLOR1, bg=BG_COLOR2, anchor='nw', justify='left', wraplength=320, width=BOXWIDTH, height=NUMLINES, relief='raised') out_txt_box.grid(row=0, column=1) ################# # MIDDLE ################ # delimiter_frame = LabelFrame(master, fg=FG_COLOR1, bg=BG_COLOR1, pady=10, text='Delimiter Settings') # delimiter_frame.pack() delimiter_frame = LabelFrame(master, fg=FG_COLOR1, bg=BG_COLOR1, pady=10, text='Delmiter (From -> To)') delimiter_frame.pack() # MIDDLE LEFT src_delimiter_container = Frame(delimiter_frame, bg=BG_COLOR1, padx=5) src_delimiter_container.grid(sticky=('n', 'w', 's', 'e'), row=0, column=0, columnspan=3) # src_delimiter_label = Label(src_delimiter_container, text="Src", justify='left', height=1, width=3, anchor='e', relief='groove') # src_delimiter_label.grid(row=0, column=0, sticky=('n','w','s','e')) # src_delimiter_radio = Frame(src_delimiter_container, relief='groove') # src_delimiter_radio.grid(row=0, column=1, sticky=('n','w','s','e')) # # i = 0 # for text, mode in MODES: # b = Radiobutton(src_delimiter_radio, text=text, width=8, # variable=src_delimiter, value=mode, indicatoron=0) # b.grid(row=0, column=i) # i = i+1 src_delimiter_option = OptionMenu( delimiter_frame, src_delimiter, *DELIMITERS) # Pointer to option array src_delimiter_option.grid(row=0, column=0) # MIDDLE MIDDLE - Delimiter out_delimiter_container = Frame(delimiter_frame, bg=BG_COLOR1, padx=5) out_delimiter_container.grid(sticky=('n', 'w', 's', 'e'), row=1, column=0, columnspan=3) # out_delimiter_label = Label(out_delimiter_container, text="Out", justify='center', height=1, width=3, anchor='e', relief='groove') # out_delimiter_label.grid(sticky=('n','w','s','e'),row=0, column=0) # # out_delimiter_radio = Frame(out_delimiter_container, width=240, height=120, relief='groove') # out_delimiter_radio.grid(sticky=('n','w','s','e'),row=0, column=1) # # i = 1 # for text, mode in MODES: # if mode != 'none': # b = Radiobutton(out_delimiter_radio, text=text, width=8, # variable=out_delimiter, value=mode, indicatoron=0) # b.grid(row=0, column=i) # i = i+1 out_delimiter_option = OptionMenu( delimiter_frame, out_delimiter, *DELIMITERS) # Pointer to option array out_delimiter_option.grid(row=0, column=1) mid_container = Frame(master, bg=BG_COLOR1) mid_container.pack() textvar_container = LabelFrame(mid_container, fg=FG_COLOR1, bg=BG_COLOR1, pady=10, text='Text Operations') textvar_container.grid(row=0, column=0, columnspan=5) # MIDDLE BOTTOM - Quote out_quote_container = Frame(textvar_container, bg=BG_COLOR1, width=100, height=160, pady=8) out_quote_container.grid(row=0, column=0) out_quote_label = Label(out_quote_container, text="Quote", justify='center', width=FIELD_WIDTH, height=1, relief='groove') out_quote_label.grid(row=0, column=0) out_quote_entry = Entry(out_quote_container, textvar=out_quote, justify='center', width=FIELD_WIDTH, relief='groove', bg=FG_COLOR1, fg=BG_COLOR1) out_quote_entry.grid(row=1, column=0) # MIDDLE BOTTOM - Prefix prefix_container = Frame(textvar_container, bg=BG_COLOR1, width=100, height=160, pady=8) prefix_container.grid(row=0, column=1) prefix_label = Label(prefix_container, text="Prefix", justify='center', width=FIELD_WIDTH, height=1, relief='groove') prefix_label.grid(row=0, column=0) prefix_entry = Entry(prefix_container, textvar=prefix, justify='center', width=FIELD_WIDTH, relief='groove', bg=FG_COLOR1, fg=BG_COLOR1) prefix_entry.grid(row=1, column=0) # MIDDLE BOTTOM - Suffix suffix_container = Frame(textvar_container, bg=BG_COLOR1, width=100, height=160, pady=8) suffix_container.grid(row=0, column=2) suffix_label = Label(suffix_container, text="Suffix", justify='center', width=FIELD_WIDTH, height=1, relief='groove') suffix_label.grid(row=0, column=0) suffix_entry = Entry(suffix_container, textvar=suffix, justify='center', width=FIELD_WIDTH, relief='groove', bg=FG_COLOR1, fg=BG_COLOR1) suffix_entry.grid(row=1, column=0) ###################### # FIND REPLACE PANEL # ###################### find_container = Frame(textvar_container, bg=BG_COLOR1, width=100, height=160, pady=8) find_container.grid(row=0, column=3) find_label = Label(find_container, text="Replace", justify='left', width=FIELD_WIDTH, height=1, relief='groove') find_label.grid(row=0, column=0) find_entry = Entry(find_container, textvar=find_text, justify='left', width=FIELD_WIDTH * 2, relief='groove', bg=FG_COLOR1, fg=BG_COLOR1) find_entry.grid(row=1, column=0) replace_container = Frame(textvar_container, bg=BG_COLOR1, width=100, height=160, pady=8) replace_container.grid(row=0, column=4) replace_label = Label(replace_container, text="With", justify='left', width=FIELD_WIDTH, height=1, relief='groove') replace_label.grid(row=0, column=0) replace_entry = Entry(replace_container, textvar=replace_text, justify='left', width=FIELD_WIDTH * 2, relief='groove', bg=FG_COLOR1, fg=BG_COLOR1) replace_entry.grid(row=1, column=0) # DATE MENU date_frame = LabelFrame(mid_container, bg=BG_COLOR1, fg=FG_COLOR1, text='Date', width=650, height=280, pady=3, padx=3, relief='groove') date_frame.grid(row=0, column=6) date_option = OptionMenu(date_frame, date_format, *DATEFORMATS) # Pointer to option array date_option.grid(row=0, column=0) date_button = Button( date_frame, text="Copy", command=lambda: self.setClipboard(self.printDate(date_format.get()) ), width=BUTTONWIDTH / 2, highlightbackground=BG_COLOR1, ) date_button.grid(row=1, column=0) ################# # BOTTOM ################ control_frame = Frame(root, bg='', width=650, height=140, pady=3, padx=3, relief='groove') control_frame.pack() # # # BOTTOM LEFT src_control_container = Frame(control_frame, bg=BG_COLOR1, width=200, height=280, padx=BUTTONPAD) src_control_container.grid(sticky='w', row=0, column=0) # Refresh State to Load refresh_button = Button( src_control_container, text="Refresh To Load State", command=lambda: source_text.set(source_text_on_load.get()), width=BUTTONWIDTH, highlightbackground=BG_COLOR1) refresh_button.grid(row=0, column=0) clipboard_button = Button( src_control_container, text="Copy from Clipboard", command=lambda: source_text.set(self.getClipboard()), width=BUTTONWIDTH, highlightbackground=BG_COLOR1) clipboard_button.grid(row=1, column=0) pushback_button = Button( src_control_container, text="Output to Input", command=lambda: source_text.set(output_text.get()), width=BUTTONWIDTH, highlightbackground=BG_COLOR1) pushback_button.grid(row=2, column=0) # BOTTOM MIDDLE settings_container = Frame(control_frame, bg='grey', width=200, height=280, pady=3, padx=3) settings_container.grid(row=0, column=1) order_check = Checkbutton(settings_container, text="Alphabeticalize", variable=order_alpha, anchor='w', width=CHECKWIDTH) order_check.pack(anchor='w') cap_check = Checkbutton(settings_container, text="Capitalize", variable=capitalize, anchor='w', width=CHECKWIDTH) cap_check.pack(anchor='w') header_check = Checkbutton(settings_container, text="Skip Header", variable=skip_header, anchor='w', width=CHECKWIDTH) header_check.pack(anchor='w') rem_check = Checkbutton(settings_container, text="Strip Blanks", variable=remove_empty, anchor='w', width=CHECKWIDTH) rem_check.pack(anchor='w') unique_check = Checkbutton(settings_container, text="Unique Values", variable=unique_only, anchor='w', width=CHECKWIDTH) unique_check.pack(anchor='w') # BOTTOM RIGHT out_control_container = Frame(control_frame, bg=BG_COLOR1, width=200, height=280, padx=BUTTONPAD) out_control_container.grid(row=0, column=2) fr_button = Button( out_control_container, text="Find/Replace", command=lambda: output_text.set( self.findReplace(source_text.get(), find_text.get(), replace_text.get())), width=BUTTONWIDTH, highlightbackground=BG_COLOR1, ) fr_button.pack() go_button = Button( out_control_container, text="Process", command=lambda: output_text.set( self.process(source_text.get(), src_delimiter.get( ), out_delimiter.get(), out_quote.get(), order_alpha.get( ), skip_header.get(), remove_empty.get(), unique_only.get(), capitalize.get(), prefix.get(), suffix.get(), find_text.get(), replace_text.get())), width=BUTTONWIDTH, highlightbackground=BG_COLOR1, ) go_button.pack() copy_button = Button( out_control_container, text="Copy to Clipboard", command=lambda: self.setClipboard(output_text.get()), width=BUTTONWIDTH, highlightbackground=BG_COLOR1) copy_button.pack() close_button = Button(out_control_container, text="Quit", command=master.quit, width=BUTTONWIDTH, highlightbackground=BG_COLOR1) close_button.pack()
def _init_components(self): # group type selection (alternating, classical, sporadic, exceptional) group_type_frame = LabelFrame(self, text="Group type", padx=10, pady=5) group_type_frame.pack(expand=True, fill='x') # group type radio buttons (Alternating, Classical etc.) self._group_type = StringVar() self._type_radio_buttons = dict() for group_type in ("Alternating", "Classical", "Exceptional", "Sporadic"): radiobutton = Radiobutton(group_type_frame, variable=self._group_type, value=group_type, text=group_type) radiobutton.pack(anchor='nw') self._type_radio_buttons[group_type] = radiobutton # set group type selection handler self._group_type.trace("w", lambda n, i, m: self._group_type_selection()) # spacer Frame(self, height=10).pack() # parameters for each group (degree for alternating, field and dimension for classical etc.) # notice that we do not pack LabelFrame contents. We do that in _group_type_selection method instead. group_params_frame = LabelFrame(self, text="Parameters", padx=10, pady=5) group_params_frame.pack(expand=True, fill='x') # alternating self._alt_params = Frame(group_params_frame) self._alt_params.columnconfigure(1, weight=1) Label(self._alt_params, text="Degree").grid(sticky='w') self._alt_degree = NumberBox(self._alt_params, constraints=Constraints(min=5)) self._alt_degree.grid(row=0, column=1, sticky='we') # classical self._clas_params = Frame(group_params_frame) self._clas_params.columnconfigure(1, weight=1) Label(self._clas_params, text="Type").grid(row=0, sticky='w') self._clas_type = OptionList(self._clas_params, values=ClassicalGroup.types()) self._clas_type.variable.trace("w", lambda n, i, m: self._classical_group_type_selection()) self._clas_type.grid(row=0, column=1, sticky='we') Label(self._clas_params, text="Dimension").grid(row=1, sticky='w') self._clas_dim = NumberBox(self._clas_params) self._clas_dim.grid(row=1, column=1, sticky='we') Label(self._clas_params, text="Field order").grid(row=2, sticky='w') self._clas_field = NumberBox(self._clas_params, constraints=Constraints(primality=numeric.PRIME_POWER)) self._clas_field.grid(row=2, column=1, sticky='we') self._classical_group_type_selection() # exceptional self._ex_params = Frame(group_params_frame) self._ex_params.columnconfigure(1, weight=1) Label(self._ex_params, text="Type").grid(row=0, sticky='w') self._ex_type = OptionList(self._ex_params, values=ExceptionalGroup.types()) self._ex_type.setvar(value=ExceptionalGroup.types()[0]) self._ex_type.grid(row=0, column=1, sticky='we') Label(self._ex_params, text="Field order").grid(row=1, sticky='w') self._ex_field = NumberBox(self._ex_params, constraints=Constraints(primality=numeric.PRIME_POWER)) self._ex_field.grid(row=1, column=1, sticky='we') # sporadic self._spor_params = Frame(group_params_frame) self._spor_params.columnconfigure(1, weight=1) Label(self._spor_params, text="Group").grid(row=0, sticky='w') self._sporadic_group = OptionList(self._spor_params, values=SporadicGroup.all_groups()) self._sporadic_group.grid(row=0, column=1, sticky='we')
class BoardConfig(Frame): def __init__(self, master=None, main=None): Frame.__init__(self, master) self.parent = master self.main = main self.parent.geometry("336x424") self.parent.title(os.getenv("NAME") + " - Board Config") self.master.configure(padx=10, pady=10) self.intvar = IntVar() #Arch self.arch_var = IntVar() lf_arch = LabelFrame(self.parent, text="Architecture") lf_arch.pack(fill=X, expand=True, side=TOP) frame_arch = Frame(lf_arch) frame_arch.pack(fill=X, expand=True, side=TOP) frame_left1 = Frame(frame_arch) frame_left1.pack(expand=True, fill=BOTH, side=LEFT) frame_right1 = Frame(frame_arch) frame_right1.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_arch_8 = Radiobutton(frame_left1, text="8-bit ", anchor="w", width=10, value=8, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_8.pack(fill=X, side=TOP) self.radioButton_arch_32 = Radiobutton(frame_right1, text="32-bit", anchor="w", width=10, value=32, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_32.pack(fill=X, side=TOP) #Mode self.mode_var = StringVar() lf_mode = LabelFrame(self.parent, text="Programming mode") lf_mode.pack(fill=X, expand=True, side=TOP) frame_mode = Frame(lf_mode) frame_mode.pack(fill=X, expand=True, side=TOP) frame_left2 = Frame(frame_mode) frame_left2.pack(expand=True, fill=BOTH, side=LEFT) frame_right2 = Frame(frame_mode) frame_right2.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_mode_icsp = Radiobutton(frame_left2, text="ICSP", anchor="w", width=10, value="icsp", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_icsp.pack(side=TOP, fill=X) self.radioButton_mode_bootloader = Radiobutton(frame_right2, text="Bootloader", anchor="w", width=10, value="bootloader", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_bootloader.pack(side=TOP, fill=X) #Bootloader self.boot_var = StringVar() self.lf_boot = LabelFrame(self.parent, text="Bootloader") self.lf_boot.pack(fill=X, expand=True, side=TOP) frame_boot = Frame(self.lf_boot) frame_boot.pack(fill=X, expand=True, side=TOP) frame_left3 = Frame(frame_boot) frame_left3.pack(expand=True, fill=BOTH, side=LEFT) frame_right3 = Frame(frame_boot) frame_right3.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3, text="v1.x or v2.x", anchor="w", width=10, value="v1_v2", variable=self.boot_var) self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True) self.radioButton_bootloader_v4 = Radiobutton(frame_right3, text="v4.x", anchor="w", width=10, value="v4", variable=self.boot_var) self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True) #Devices 8bit self.dev8_var = StringVar() self.lf_dev8 = LabelFrame(self.parent, text="Devices") self.lf_dev8.pack(fill=X, expand=True, side=TOP) self.frame_8b = Frame(self.lf_dev8) self.frame_8b.pack(fill=X, expand=True, side=TOP) #Devices 32bit self.dev32_var = StringVar() self.lf_dev32 = LabelFrame(self.parent, text="Devices") self.lf_dev32.pack(fill=X, expand=True, side=TOP) self.frame_32b = Frame(self.lf_dev32) self.frame_32b.pack(fill=X, expand=True, side=TOP) frame_buttons = Frame(self.parent) Button(frame_buttons, text="Accept", command=self.accept_config).pack(fill=X, expand=True, side=RIGHT) Button(frame_buttons, text="Cancel", command=self.quit).pack(fill=X, expand=True, side=LEFT) frame_buttons.pack(fill=X, expand=True, side=BOTTOM) frame_advance = Frame(self.parent) self.advanceoptions = Button(frame_advance, text="Advance options", command=self.advance) self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) frame_advance.pack(fill=X, expand=True, side=BOTTOM) frame_warning = Frame(self.parent) self.label_warning = Label(frame_warning, fg="red", text="warning!", anchor="w") self.label_warning.pack(fill=X, expand=True, side=BOTTOM) frame_warning.pack(fill=X, expand=True, side=BOTTOM) self.build_devices_arch() self.load_config() self.init_groups() #---------------------------------------------------------------------- def quit(self): self.master.destroy() #---------------------------------------------------------------------- def build_devices_arch(self): #8bits name_checked = self.main.configIDE.config("Board", "board_8", "Pinguino 2550") arch_8 = filter(lambda board:board.arch==8, self.main.pinguinoAPI._boards_) arch_8.sort() frame_left = Frame(self.frame_8b) frame_left.pack(expand=True, fill=BOTH, side=LEFT) frame_right = Frame(self.frame_8b) frame_right.pack(expand=True, fill=BOTH, side=RIGHT) parent = frame_left #left for board in arch_8: if arch_8.index(board) == (len(arch_8) / 2) + 1: parent = frame_right #rigth radio = Radiobutton(parent, text=board.name, anchor="w", width=10, value=board.name, variable=self.dev8_var, command=lambda :self.set_board_name(board.name, "8")) radio.pack(expand=True, fill=X, side=TOP) #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_8) #self.board_config.gridLayout_device_8.addWidget(radio, count, side, 1, 1) #radio.setText(board.name) #radio.setToolTip(board.proc) if name_checked == board.name: radio.select() #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "8")) #32bits name_checked = self.main.configIDE.config("Board", "board_32", "PIC32 Pinguino OTG") arch_32 = filter(lambda board:board.arch==32, self.main.pinguinoAPI._boards_) arch_32.sort() frame_left0 = Frame(self.frame_32b) frame_left0.pack(expand=True, fill=BOTH, side=LEFT) frame_right0 = Frame(self.frame_32b) frame_right0.pack(expand=True, fill=BOTH, side=RIGHT) parent = frame_left0 #left for board in arch_32: if arch_32.index(board) == (len(arch_32) / 2) + 1: parent = frame_right0 #rigth radio = Radiobutton(parent, text=board.name, anchor="w", width=10, value=board.name, variable=self.dev32_var, command=lambda :self.set_board_name(board.name, "32")) radio.pack(expand=True, fill=X, side=TOP) #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_32) #self.board_config.gridLayout_device_32.addWidget(radio, count, side, 1, 1) #radio.setText(board.name) #radio.setToolTip(board.proc) if name_checked == board.name: radio.select() #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "32")) #---------------------------------------------------------------------- def load_config(self): self.main.configIDE.load_config() arch = self.main.configIDE.config("Board", "arch", 8) getattr(self.radioButton_arch_8, "select" if (arch == 8) else "deselect")() getattr(self.radioButton_arch_32, "select" if (arch == 32) else "deselect")() if arch == 32: self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) else: self.advanceoptions.forget() mode = self.main.configIDE.config("Board", "mode", "bootloader") getattr(self.radioButton_mode_bootloader, "select" if (mode == "bootloader") else "deselect")() getattr(self.radioButton_mode_icsp, "select" if (mode == "icsp") else "deselect")() bootloader = self.main.configIDE.config("Board", "bootloader", "v1_v2") getattr(self.radioButton_bootloader_v1_v2, "select" if (bootloader == "v1_v2") else "deselect")() getattr(self.radioButton_bootloader_v4, "select" if (bootloader == "v4") else "deselect")() self.update_mode() #---------------------------------------------------------------------- def update_mode(self): mode_boot = self.mode_var.get() == "bootloader" arch_8 = self.arch_var.get() == 8 if mode_boot and arch_8: self.lf_boot.pack(fill=X, expand=True, side=TOP) else: self.lf_boot.forget() self.init_groups() if not mode_boot: self.label_warning.configure(text="WARNING!! this mode can overwite the bootloader code.") else: self.label_warning.configure(text="") #---------------------------------------------------------------------- def set_board_name(self, name, arch): def dummy(): self.main.configIDE.set("Board", "board_"+arch, name) return dummy #---------------------------------------------------------------------- def init_groups(self): self.lf_dev32.forget() self.lf_dev8.forget() if self.arch_var.get() == 8: self.lf_dev8.pack(fill=X, expand=True, side=TOP) self.advanceoptions.forget() else: self.lf_dev32.pack(fill=X, expand=True, side=TOP) self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) #---------------------------------------------------------------------- def save_config(self): #if self.board_config.radioButton_arch_8.isChecked(): arch = 8 #else: arch = 32 self.main.configIDE.set("Board", "arch", self.arch_var.get()) #if self.board_config.radioButton_mode_bootloader.isChecked(): mode = "bootloader" #else: mode = "icsp" self.main.configIDE.set("Board", "mode", self.mode_var.get()) #if self.board_config.radioButton_bootloader_v1_v2.isChecked(): bootloader = "v1_v2" #else: bootloader = "v4" self.main.configIDE.set("Board", "bootloader", self.boot_var.get()) name = self.main.configIDE.config("Board", "board_"+str(self.arch_var.get()), None) self.main.configIDE.set("Board", "board", name) #---------------------------------------------------------------------- def accept_config(self): self.save_config() self.main.configIDE.save_config() self.main.statusbar_ide(self.main.get_status_board()) self.close_advance() self.quit() #---------------------------------------------------------------------- def advance(self): root = Toplevel() self.frame_advance = BoardConfigAdvance(master=root, main=self.main) self.frame_advance.mainloop() #---------------------------------------------------------------------- def close_advance(self): try: assert self.frame_advance except: return self.frame_advance.quit()
updateRGB() def v_sel(val): print "v_sel(" + str(val) + ")" selection = "V = " + str(v_var.get()) v_label.config(text = selection) updateRGB() tk = Tk() tk.wm_title("Colour Demo") canvas = Canvas(width=400, height=300, bg="#%02x%02x%02x" % (0, 0, 0)) canvas.pack() rgbFrame = LabelFrame(tk, text="RGB") rgbFrame.pack(fill="both", expand="yes") r_var = IntVar() r_scale = Scale(rgbFrame, variable = r_var, from_=0, to=255, showvalue=0, orient=HORIZONTAL, command=r_sel) r_scale.pack() r_label = Label(rgbFrame) r_label.pack() g_var = IntVar() g_scale = Scale(rgbFrame, variable = g_var, from_=0, to=255, showvalue=0, orient=HORIZONTAL, command=g_sel) g_scale.pack() g_label = Label(rgbFrame) g_label.pack() b_var = IntVar() b_scale = Scale(rgbFrame, variable = b_var, from_=0, to=255, showvalue=0, orient=HORIZONTAL, command=b_sel)
class MainWindow: def __init__(self): self.root = Tk() self.input_type = Tkinter.IntVar() self.input_type.set(1) self.normalize_data = Tkinter.IntVar() self.normalize_data.set(1) self.root.title("Code energy calculator") self.left_frame = LabelFrame(self.root, text="Input and output") self.left_frame.pack(side=Tkinter.LEFT, fill=Tkinter.BOTH, expand=True, padx=(10, 5), pady=10) self.right_frame = LabelFrame(self.root, text="Code") self.right_frame.pack(side=Tkinter.RIGHT, fill=Tkinter.BOTH, expand=True, padx=(5, 10), pady=10) code_hscroll = Scrollbar(self.right_frame, orient=Tkinter.HORIZONTAL) code_hscroll.pack(side=Tkinter.BOTTOM, fill=Tkinter.X) code_vscroll = Scrollbar(self.right_frame) code_vscroll.pack(side=Tkinter.RIGHT, fill=Tkinter.Y) self.code_text = Text(self.right_frame, wrap=Tkinter.NONE, xscrollcommand=code_hscroll.set, yscrollcommand=code_vscroll.set) self.code_text.pack() self.code_text.insert(Tkinter.INSERT, DEFAULT_CODE) code_hscroll.config(command=self.code_text.xview) code_vscroll.config(command=self.code_text.yview) self.input_file_entry =\ self.create_and_add_file_field(self.left_frame, "Input file", 5, False) self.spherical_coord_option =\ Radiobutton(self.left_frame, text="Spherical coordinates", variable=self.input_type, value=1) self.spherical_coord_option.pack(anchor=Tkinter.W) self.cartesian_coord_option =\ Radiobutton(self.left_frame, text="Cartesian coordinates", variable=self.input_type, value=2) self.cartesian_coord_option.pack(anchor=Tkinter.W) self.spherical_coord_option.select() self.output_file_entry =\ self.create_and_add_file_field(self.left_frame, "Output file", 5, True) self.normalize_check = Checkbutton(self.left_frame, text="Normalize data", variable=self.normalize_data, offvalue=0, onvalue=1) self.normalize_check.pack() self.normalize_check.deselect() self.do_button = Button(self.left_frame, text="Run", command=self.run) self.do_button.pack(side=Tkinter.BOTTOM, pady=(0, 10)) def create_and_add_file_field(self, parent, title, pad, is_save): title_label = Label(parent, text=title) title_label.pack(side=Tkinter.TOP, padx=pad) container_frame = Frame(parent) container_frame.pack(side=Tkinter.TOP, padx=pad, pady=(0, pad)) filename_entry = Entry(container_frame) filename_entry.pack(side=Tkinter.LEFT) browse_button = \ Button(container_frame, text="Browse...", command=lambda: self.select_file(filename_entry, is_save)) browse_button.pack(side=Tkinter.RIGHT) return filename_entry @staticmethod def select_file(text_field, is_save): text_field.delete(0, Tkinter.END) if is_save: filename = asksaveasfilename() else: filename = askopenfilename() text_field.insert(0, filename) def run(self): input_fname = self.input_file_entry.get() output_fname = self.output_file_entry.get() code = self.code_text.get(1.0, Tkinter.END) do_work(input_fname, output_fname, code, self.input_type.get(), self.normalize_data.get()) def show(self): self.root.mainloop()
class ArduinoSetup: def __init__(self, master, args): self.master = master self.master.minsize(width=360, height=600) self.master.title(PROJECT_TEXT) # GUI PROPS self.padXOut = 5 self.padYOut = 3 self.padXIn = 5 self.padYIn = 3 self.frameRelief = GROOVE self.frameBorder = 2 self.infoFG = "teal" self.selectBG = "teal" self.textBG = "white" self.errorBG = "red" self.vAction = StringVar() if args.verify: self.vAction.set("--verify") elif args.upload: self.vAction.set("--upload") else: self.vAction.set("") self.verify = args.verify self.upload = args.upload self.vPath = StringVar() self.vPath.set(args.arduino) self.vBoard = StringVar() self.vBoard.set(args.board) self.vPort = StringVar() self.vPort.set(args.port) self.vFile = StringVar() self.vFile.set(args.file) # GUI WIDGETS self.errorPath = True self.errorBoard = True self.errorPort = True self.errorFile = True self.enablePath = True self.enableBoard = True self.enablePort = True self.enableFile = True if self.vPath.get() != "": self.enablePath = False if self.vBoard.get() != "": self.enableBoard = False if self.vPort.get() != "": self.enablePort = False if self.vFile.get() != "": self.enableFile = False if self.enablePath: optArdu = {} optArdu["defaultextension"] = ".exe" optArdu["filetypes"] = [("exe files", ".exe"), ("all files", ".*")] # options['initialdir'] = 'C:\\' optArdu["initialfile"] = "arduino.exe" optArdu["parent"] = master optArdu["title"] = "Open arduino.exe" if system() == WINDOWS: pathexample = """Example: C:/Program Files/Arduino/arduino.exe""" else: pathexample = """Location of arduino executable""" self.vcmdPath = master.register(self.validatePath) self.framePath = LabelFrame(master, text="Arduino.exe path:", bd=self.frameBorder, relief=self.frameRelief) self.entryPath = Entry( self.framePath, bg=self.textBG, validate="all", validatecommand=(self.vcmdPath, "%P"), textvar=self.vPath, selectbackground=self.selectBG, ) self.entryPath.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.buttonPath = Button( self.framePath, text="Find arduino...", command=lambda: self.openPath(optArdu, self.vPath) ) self.buttonPath.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.labelPathInfo = Label(self.framePath, fg=self.infoFG, text=pathexample) self.labelPathInfo.pack(fill=X) self.framePath.pack(fill=X, padx=self.padXOut, pady=self.padYOut) if self.enableBoard: self.vcmdBoard = master.register(self.validateBoard) self.frameBoard = LabelFrame(master, text="Board:", bd=self.frameBorder, relief=self.frameRelief) self.entryBoard = Entry( self.frameBoard, bg=self.textBG, validate="all", validatecommand=(self.vcmdBoard, "%P"), textvar=self.vBoard, selectbackground=self.selectBG, ) self.entryBoard.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.labelBoardInfo = Label(self.frameBoard, fg=self.infoFG, text="""package:arch:board[:parameters]""") self.labelBoardInfo.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.textBoardExample = Text(self.frameBoard, fg=self.infoFG, width=50, height=6) self.textBoardExample.insert( END, """Packages: arduino, sparkfun, ... Arch: avr, sam, ... Boards: uno, mega, promicro, ... Parameters: cpu=CPU, ... Example: arduino:avr:nano:cpu=atmega168 SparkFun:avr:promicro:cpu=8MHzatmega32U4""", ) self.textBoardExample.config(state=DISABLED) self.textBoardExample.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.frameBoard.pack(fill=X, padx=self.padXOut, pady=self.padYOut) if self.enablePort: self.framePort = LabelFrame(master, text="Port:", bd=self.frameBorder, relief=self.frameRelief) if system() == WINDOWS: self.ports = serial_ports() # only for testing # self.ports.append(("COM", "Device 123")) self.frameListbox = Frame(self.framePort) scrollbar = Scrollbar(self.frameListbox) scrollbar.pack(side=RIGHT, fill=Y) self.listboxPort = Listbox( self.frameListbox, height=2, bg=self.textBG, selectbackground=self.selectBG, yscrollcommand=scrollbar.set, ) scrollbar.config(command=self.listboxPort.yview) self.listboxPort.insert(END, *self.ports) self.listboxPort.pack(fill=BOTH, expand=1) self.listboxPort.bind("<<ListboxSelect>>", self.portSelected) self.frameListbox.pack(fill=BOTH, expand=1, padx=self.padXIn, pady=self.padYIn) self.labelPortInfo = Label(self.framePort, fg=self.infoFG, text="port | port name | device name") self.labelPortInfo.pack(side=BOTTOM, fill=X, padx=self.padXIn, pady=self.padYIn) else: self.vcmdPort = master.register(self.validatePort) self.entryPort = Entry( self.framePort, bg=self.textBG, validate="all", validatecommand=(self.vcmdPort, "%P"), textvar=self.vPort, selectbackground=self.selectBG, ) self.entryPort.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.labelPortInfo = Label(self.framePort, fg=self.infoFG, text="""Example: /dev/ttyUSB0""") self.labelPortInfo.pack(side=BOTTOM, fill=X, padx=self.padXIn, pady=self.padYIn) self.framePort.pack(fill=BOTH, expand=1, padx=self.padXOut, pady=self.padYOut) if self.enableFile: optFile = {} optFile["defaultextension"] = ".ino" optFile["filetypes"] = [("arduino source files", ".ino"), ("all files", ".*")] # options['initialdir'] = 'C:\\' optFile["initialfile"] = "" optFile["parent"] = master optFile["title"] = "Open arduino source code" self.vcmdFile = master.register(self.validateFile) self.frameFile = LabelFrame(master, text="Source code path:", bd=self.frameBorder, relief=self.frameRelief) self.entryFile = Entry( self.frameFile, bg=self.textBG, validate="all", validatecommand=(self.vcmdFile, "%P"), textvar=self.vFile, selectbackground=self.selectBG, ) self.entryFile.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.buttonFile = Button( self.frameFile, text="Find source code...", command=lambda: self.openPath(optFile, self.vFile) ) self.buttonFile.pack(fill=X, padx=self.padXIn, pady=self.padYIn) self.labelFileInfo = Label( self.frameFile, fg=self.infoFG, text="""Source code to compile (file extension .ino)""" ) self.labelFileInfo.pack(fill=X) self.frameFile.pack(fill=X, padx=self.padXOut, pady=self.padYOut) # BOTTOM side items (reversed order) self.frameAbout = Frame(master, cursor="heart") self.labelAbout = Label(self.frameAbout, text=COPYRIGHT_TEXT, fg=self.infoFG) self.labelAbout.pack(side=LEFT) self.buttonAbout = Button( self.frameAbout, text="About app...", fg=self.infoFG, command=self.openAboutBox, borderwidth=1 ) self.buttonAbout.pack(side=RIGHT) self.frameAbout.pack(side=BOTTOM, fill=X, padx=self.padXOut, pady=self.padYOut) if self.vAction.get() != "": self.buttonContinue = Button(master, text="Continue", command=self.doContinue) self.buttonContinue.pack(fill=X, padx=self.padXOut, pady=self.padYOut) else: if self.verify is False: self.buttonVerify = Button(master, text="Verify", command=self.doVerify) self.buttonVerify.pack(side=BOTTOM, fill=X, padx=self.padXOut, pady=self.padYOut) if self.upload is False: self.buttonUpload = Button(master, text="Upload", command=self.doUpload) self.buttonUpload.pack(side=BOTTOM, fill=X, padx=self.padXOut, pady=self.padYOut) def openAboutBox(self): dialog = AboutDialog(self.master) def portSelected(self, P): self.errorPort = False self.listboxPort.config(bg=self.textBG) try: porti = map(int, self.listboxPort.curselection())[0] self.vPort.set(self.ports[porti][0]) except (IndexError): self.errorPort = True self.listboxPort.config(bg=self.errorBG) # only for linux def validatePort(self, P): if self.vPort.get() == "" and P == "": self.errorPort = True self.entryPort.config(bg=self.errorBG) return False else: self.errorPort = False self.entryPort.config(bg=self.textBG) return True def validatePath(self, P): if self.vPath.get() == "" and P == "": self.errorPath = True self.entryPath.config(bg=self.errorBG) return False else: self.errorPath = False self.entryPath.config(bg=self.textBG) return True def validateBoard(self, P): if self.vBoard.get() == "" and P == "": self.errorBoard = True self.entryBoard.config(bg=self.errorBG) return False else: self.errorBoard = False self.entryBoard.config(bg=self.textBG) return True def validateFile(self, P): if self.vFile.get() == "" and P == "": self.errorFile = True self.entryFile.config(bg=self.errorBG) return False else: self.errorFile = False self.entryFile.config(bg=self.textBG) return True def openPath(self, opt, sv): sv.set(tkFileDialog.askopenfilename(**opt)) def doVerify(self): self.vAction.set("--verify") self.doContinue() def doUpload(self): self.vAction.set("--upload") self.doContinue() def doContinue(self): if self.enablePath: self.validatePath(self.vPath.get()) else: self.errorPath = False if self.enableBoard: self.validateBoard(self.vBoard.get()) else: self.errorBoard = False if self.enableFile: self.validateFile(self.vFile.get()) else: self.errorFile = False if self.enablePort and system() != WINDOWS: print self.vPort.get() self.validatePort(self.vPort.get()) else: self.errorPort = False self.doAction() def doAction(self): result = 3 if self.errorPath or self.errorBoard or self.errorPort or self.errorFile: print "something missing" return command = '"' command += self.vPath.get() command += '" ' + self.vAction.get() command += " --board " + self.vBoard.get() command += " --port " + self.vPort.get() command += " --verbose" command += ' "' + self.vFile.get() command += '"' print "command:", command print "Please wait ..." sys.stdout.flush() self.master.destroy() p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = p.communicate() print output result = p.returncode
def __init__(self, master=None): Frame.__init__(self, master) self.pack() # First row f1 = LabelFrame(self, text='NAND file with No$GBA footer', padx=10, pady=10) # NAND Button self.nand_mode = False nand_icon = PhotoImage( data=('R0lGODlhEAAQAIMAAAAAADMzM2ZmZpmZmczMzP///wAAAAAAAAA' 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAYALAAAAAAQAB' 'AAAARG0MhJaxU4Y2sECAEgikE1CAFRhGMwSMJwBsU6frIgnR/bv' 'hTPrWUSDnGw3JGU2xmHrsvyU5xGO8ql6+S0AifPW8kCKpcpEQA7')) self.nand_button = Button(f1, image=nand_icon, command=self.change_mode, state=DISABLED) self.nand_button.image = nand_icon self.nand_button.pack(side='left') self.nand_file = StringVar() Entry(f1, textvariable=self.nand_file, state='readonly', width=40).pack(side='left') Button(f1, text='...', command=self.choose_nand).pack(side='left') f1.pack(padx=10, pady=10, fill=X) # Second row f2 = Frame(self) # Check box self.twilight = IntVar() self.twilight.set(1) self.chk = Checkbutton( f2, text='Install latest TWiLight Menu++ on custom firmware', variable=self.twilight) self.chk.pack(padx=10, anchor=W) # NAND operation frame self.nand_frame = LabelFrame(f2, text='NAND operation', padx=10, pady=10) self.nand_operation = IntVar() self.nand_operation.set(0) Radiobutton(self.nand_frame, text='Uninstall unlaunch or install v1.4 stable', variable=self.nand_operation, value=0, command=lambda: self.enable_entries(False)).pack(anchor=W) Radiobutton(self.nand_frame, text='Remove No$GBA footer', variable=self.nand_operation, value=1, command=lambda: self.enable_entries(False)).pack(anchor=W) Radiobutton(self.nand_frame, text='Add No$GBA footer', variable=self.nand_operation, value=2, command=lambda: self.enable_entries(True)).pack(anchor=W) fl = Frame(self.nand_frame) self.cid_label = Label(fl, text='eMMC CID', state=DISABLED) self.cid_label.pack(anchor=W, padx=(24, 0)) self.cid = StringVar() self.cid_entry = Entry(fl, textvariable=self.cid, width=20, state=DISABLED) self.cid_entry.pack(anchor=W, padx=(24, 0)) fl.pack(side='left') fr = Frame(self.nand_frame) self.console_id_label = Label(fr, text='Console ID', state=DISABLED) self.console_id_label.pack(anchor=W) self.console_id = StringVar() self.console_id_entry = Entry(fr, textvariable=self.console_id, width=20, state=DISABLED) self.console_id_entry.pack(anchor=W) fr.pack(side='right') f2.pack(fill=X) # Third row f3 = Frame(self) self.start_button = Button(f3, text='Start', width=16, command=self.hiya, state=DISABLED) self.start_button.pack(side='left', padx=(0, 5)) Button(f3, text='Quit', command=root.destroy, width=16).pack(side='left', padx=(5, 0)) f3.pack(pady=(10, 20)) self.folders = [] self.files = []
def _init_components(self): # group type selection (alternating, classical, sporadic, exceptional) group_type_frame = LabelFrame(self, text="Group type") group_type_frame.pack(expand=True, fill="x", padx=10, pady=5) # group type radio buttons (Alternating, Classical etc.) self._group_type = StringVar() self._type_radio_buttons = dict() for type in ("Alternating", "Classical", "Exceptional", "Sporadic"): self._type_radio_buttons[type] = Radiobutton( group_type_frame, variable=self._group_type, value=type, text=type ) self._type_radio_buttons[type].pack(anchor="nw", padx=10) # set group type selection handler self._group_type.trace("w", lambda n, i, m: self._group_type_selection()) # parameters for each group (degree for alternating, field and # dimension for classical etc. group_params_frame = LabelFrame(self, text="Parameters") group_params_frame.pack(expand=True, fill="x", padx=10, pady=5) # alternating self._alt_params = Frame(group_params_frame) self._alt_params.columnconfigure(1, weight=1) Label(self._alt_params, text="Degree").grid(sticky="w") self._alt_degree = NumberBox(self._alt_params, constraints=Constraints(min=5)) self._alt_degree.grid(row=0, column=1, sticky="we") # classical self._clas_params = Frame(group_params_frame) self._clas_params.columnconfigure(1, weight=1) Label(self._clas_params, text="Type").grid(row=0, sticky="w") self._clas_type = OptionList(self._clas_params, values=ClassicalGroup.types()) self._clas_type.variable.trace("w", lambda n, i, m: self._classical_group_type_selection()) self._clas_type.grid(row=0, column=1, sticky="we") Label(self._clas_params, text="Dimension").grid(row=1, sticky="w") self._clas_dim = NumberBox(self._clas_params) self._clas_dim.grid(row=1, column=1, sticky="we") Label(self._clas_params, text="Field order").grid(row=2, sticky="w") self._clas_field = NumberBox(self._clas_params, constraints=Constraints(primality=numeric.PRIME_POWER)) self._clas_field.grid(row=2, column=1, sticky="we") self._classical_group_type_selection() # exceptional self._ex_params = Frame(group_params_frame) self._ex_params.columnconfigure(1, weight=1) Label(self._ex_params, text="Type").grid(row=0, sticky="w") self._ex_type = OptionList(self._ex_params, values=ExceptionalGroup.types()) self._ex_type.setvar(value=ExceptionalGroup.types()[0]) self._ex_type.grid(row=0, column=1, sticky="we") Label(self._ex_params, text="Field order").grid(row=1, sticky="w") self._ex_field = NumberBox(self._ex_params, constraints=Constraints(primality=numeric.PRIME_POWER)) self._ex_field.grid(row=1, column=1, sticky="we") # sporadic self._spor_params = Frame(group_params_frame) self._spor_params.columnconfigure(1, weight=1) Label(self._spor_params, text="Group").grid(row=0, sticky="w") self._sporadic_group = OptionList(self._spor_params, values=SporadicGroup.all_groups()) self._sporadic_group.grid(row=0, column=1, sticky="we") # pack params frames for child_frame in group_params_frame.winfo_children(): child_frame.pack(expand=True, fill="x", padx=10)
def initUI(self): self.parent.title("Caritas") self.style = Style() self.style.theme_use("default") self.pack(fill=BOTH, expand=1) frameMenu = Frame(self) frameMenu.pack(fill="both", expand="0", side=RIGHT) labelBusqueda = LabelFrame(frameMenu, text="Busqueda") labelBusqueda.pack(fill="x",expand =1) labelVoluntarios = LabelFrame(frameMenu) labelVoluntarios.pack(fill="both",expand =0) frameTabla = Frame(self) frameTabla.pack(fill="both", expand="1", side=LEFT) labelTabla = LabelFrame(frameTabla) labelTabla.pack(fill="both", expand="1") labelBotonera = LabelFrame(frameTabla) labelTabla.pack(fill="both", expand="1") labelSelect = LabelFrame(frameTabla) labelSelect.pack(fill="both", expand="1") model = TableModel() modelSelect = TableModel() model.addColumn("nombre") model.addColumn("apellidos") model.addColumn("dni") model.addColumn("direccion") model.addColumn("correo_electronico") model.addColumn("estudio") model.addColumn("parroquial") model.addColumn("proyecto") model.addColumn("genero") model.addColumn("fecha_nacimiento") model.addColumn("telefono_1") model.addColumn("telefono_2") modelSelect.addColumn("nombre") modelSelect.addColumn("apellidos") modelSelect.addColumn("dni") modelSelect.addColumn("direccion") modelSelect.addColumn("correo_electronico") modelSelect.addColumn("estudio") modelSelect.addColumn("parroquial") modelSelect.addColumn("proyecto") modelSelect.addColumn("genero") modelSelect.addColumn("fecha_nacimiento") modelSelect.addColumn("telefono_1") modelSelect.addColumn("telefono_2") #Tabla Voluntarios self.listilla= queryAllVoluntarios() model.importDict(self.listilla) self.table = TableCanvas(labelTabla, model=model,editable=False) self.table.createTableFrame() self.table.handle_double_click(self.eventoClic) #Tabla Seleccionados self.selectTable = TableCanvas(labelSelect, model=modelSelect,editable=False) self.selectTable.createTableFrame() self.listadoSeleccionado = [] L1 = Label(labelBusqueda, text="Nombre") L1.pack() E1 = Entry(labelBusqueda) E1.pack() L2 = Label(labelBusqueda, text="Apellidos") L2.pack() E2 = Entry(labelBusqueda) E2.pack() botonArriba = Button(labelVoluntarios, text="Agregar al listado", command=lambda:self.agregarListado(self.table.getSelectedRow())) botonArriba.pack() botonAbajo = Button(labelVoluntarios, text="Quitar del listado", command=lambda:self.quitarListado(self.selectTable.getSelectedRow())) botonAbajo.pack() button = Button(labelBusqueda, text="Buscar", command=lambda: self.buscar(E1.get(),E2.get())) button.pack() button = Button(labelVoluntarios, text="Nuevo Voluntario", command=lambda:self.ventanaVoluntarios(-1)) button.pack() buttonEditar = Button(labelVoluntarios, text="Editar Voluntario", command=lambda:self.ventanaVoluntarios(self.table.getSelectedRow())) buttonEditar.pack() buttonImprimir = Button(labelVoluntarios, text="Imprimir", command=lambda:self.ventanaImprimir()) buttonImprimir.pack()
class Facade(Frame): """This is a Frame that contains group info, group order, apex and prime graph. """ def __init__(self, parent, group, show_graph=True, graph_class=None, **kw): """ Parameters: show_graph: whether to create and show graph instantly or provide a button to do that lately graph_factory: callable accepting one argument - the Group instance and returning Graph instance. Note that __str__ method of the callable is used in the UI. """ Frame.__init__(self, parent, **kw) self._group = group # self._show_apex = True self._show_graph = show_graph self._graph_class = graph_class self._init_variables() self._init_menu() self._init_components() @property def group(self): return self._group @property def apex_list_container(self): return self._apex_container @property def graph_canvas(self): return self._graph_canvas def _show_graph_canvas(self): self._show_graph_button.forget() # TODO: add different layouts and other options graph_class = self._graph_class self.graph = graph_class(self._group) self._graph_canvas = GraphCanvas(self._right_pane, SpringLayout(self.graph), caption=str(graph_class)) self._graph_canvas.pack(expand=True, fill='both') self._graph_canvas.vertex_label_mode = self.getvar( name=self.winfo_name() + ".vertexlabelposition") self._iterations_plugin = IterationsPlugin() self._iterations_plugin.apply(self._graph_canvas) self.update_layout() def _init_components(self): self._panes = PanedWindow(self, orient='horizontal', sashrelief='raised') self._panes.pack(expand=True, fill='both') self._left_pane = Frame(self._panes, padx=2, pady=2) self._right_pane = Frame(self._panes) self._panes.add(self._left_pane, width=250) self._panes.add(self._right_pane) # group name group_name_pane = LabelFrame(self._left_pane, text="Group", padx=10, pady=5) group_name_pane.pack(fill='x') self._group_name = GroupNameLabel(group_name_pane, self._group) self._group_name.pack(expand=True, fill='both') # group order group_order_pane = LabelFrame(self._left_pane, text="Order", padx=10, pady=5) group_order_pane.pack(fill='x') self._group_order = IntegerContainer(group_order_pane, integer=self._group.order()) self._group_order.pack(expand=True, fill='both') # apex self._apex_pane = LabelFrame(self._left_pane, text="Apex", padx=10, pady=5) self._apex_pane.pack(expand=True, fill='both') self._apex_container = ApexListContainer(self._apex_pane, apex=self._group.apex()) self._apex_container.pack(expand=True, fill='both') # graph controls cocliques_frame = LabelFrame(self._left_pane, text="Cocliques", padx=10, pady=5) cocliques_frame.pack(fill='x') self._cocliques_button = Button(cocliques_frame, text="Calculate", command=self._show_cocliques) self._cocliques_button.pack(anchor='nw') self._cocliques_container = ListContainer(cocliques_frame) self._cocliques_list = Listbox(self._cocliques_container) self._cocliques_container.set_listbox(self._cocliques_list) # Button(graph_controls, text='Group equivalent vertices').pack(anchor='nw') # this is a button that show up instead of graph canvas if we uncheck 'Show graph' checkbox. self._show_graph_button = Button(self._right_pane, text='Show graph', command=self._show_graph_canvas) self._graph_canvas = None if self._show_graph: self._show_graph_canvas() else: self._show_graph_button.pack() def _init_variables(self): def set_default_var(self, name): """Sets widget-specific var with same value as root. """ default_var = self.getvar(name) local_var_name = self.winfo_name() + "." + name self.setvar(local_var_name, default_var) return local_var_name local_name = set_default_var(self, "vertexlabelposition") tools.trace_variable(self, local_name, "w", self._change_vertex_label_position) def _change_vertex_label_position(self, name, *arg): # override default value self.setvar("vertexlabelposition", self.getvar(name)) if self._graph_canvas is not None: self._graph_canvas.vertex_label_mode = self.getvar(name) def _init_menu(self): """Init menu bar content. """ toplevel = self.winfo_toplevel() if toplevel['menu']: self._menu = self.nametowidget(name=toplevel['menu']) else: self._menu = Menu(toplevel) toplevel['menu'] = self._menu graph_options = Menu(self._menu, tearoff=0) self._menu.add_cascade(label="Graph", menu=graph_options) self._menu_index = self._menu.index("end") vertex_label_position_menu = Menu(graph_options, tearoff=0) graph_options.add_cascade(label="Label position", menu=vertex_label_position_menu) menu_var = self.winfo_name() + ".vertexlabelposition" vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Auto", value="auto") vertex_label_position_menu.add_radiobutton(variable=menu_var, label="Center", value="center") graph_options.add_command(label="Save graph...", command=self.call_graph_save_dialog) self.bind("<Destroy>", self.__destroy_menu) #noinspection PyUnusedLocal def __destroy_menu(self, event): try: self._menu.delete(self._menu_index) except TclError: pass def _show_cocliques(self): cocliques = self.graph.max_cocliques() def select_coclique(*_): index = next(iter(self._cocliques_list.curselection()), None) if index is not None: selected = cocliques[int(index)] pick_state = self._graph_canvas.picked_vertex_state pick_state.clear() for value in selected: pick_state.pick(self._graph_canvas.get_vertex(value)) self._cocliques_list.insert( 0, *[', '.join(map(str, coclique)) for coclique in cocliques]) self._cocliques_list.bind("<Double-Button-1>", select_coclique) self._cocliques_button.forget() self._cocliques_container.pack(expand=True, fill='both') def call_graph_save_dialog(self): file_name = tkFileDialog.asksaveasfilename( defaultextension='.ps', filetypes=[('PostScript', '.ps')], parent=self.winfo_toplevel(), title="Save graph as image") if file_name: with codecs.open(file_name, 'w', encoding='utf-8') as f: f.write(self._graph_canvas.postscript()) def update_layout(self): try: self._iterations_plugin.iterate(50) except AttributeError: pass
def __init__(self, statement, entry): """ instantiate a transaction window """ self.rules = statement.rules self.root = Tk() self.root.title("Manual Annotation") t = Frame(self.root, bd=2 * self.BORDER) # top stack: input file name f = Frame(t) caption = "File: " + statement.filename + ", line: " + str(statement.file_line) Label(f, text=caption).pack() f.pack(pady=self.PADDING) # middle stack: entry details f = Frame(t) f1 = LabelFrame(f, text="Date") self.date = Label(f1, text=entry.date) self.date.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f1 = LabelFrame(f, text="Amount") self.amount = Label(f1, text=entry.amount) self.amount.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f1 = LabelFrame(f, text="Account") self.acct = Text(f1, height=1, width=self.ACCT_WID) if entry.account is not None: self.acct.insert(END, entry.account) self.acct.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f1 = LabelFrame(f, text="Description") self.desc = Text(f1, height=1, width=self.DESC_WID) self.desc.insert(END, entry.description) self.desc.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f.pack(pady=self.PADDING) # bottom stack: action buttons f = Frame(t) b = Button(f, text="Accept", command=self.accept) b.pack(side=LEFT, padx=self.PADDING) # account selection menu self.account = StringVar(f) self.account.set(entry.account) m = OptionMenu(f, self.account, *sorted(statement.acc_list), command=self.chooseAcct) m.pack(side=LEFT, padx=self.PADDING) # aggregate description selection menu self.description = StringVar(f) self.menu = OptionMenu(f, self.description, *sorted(statement.agg_list), command=self.chooseDesc) self.menu.pack(side=LEFT, padx=self.PADDING) b = Button(f, text="Delete", command=self.delete) b.pack(side=LEFT, padx=self.PADDING) f.pack(padx=self.PADDING, pady=self.PADDING) # finalize t.pack(side=TOP) self.entry = entry # default: return what we got
class Message(Show_style): def __init__(self, master=None): Show_style.__init__(self, master) self.add_status() self.create_widget() self.pack_all() def create_widget(self): self.create_main_frame() def create_main_frame(self): self.main_labelframe = LabelFrame(self, text='消息中心') self.main_list_item = (('业务编号', 10), ('客户编号', 8), ('客户名称', 20), ('发放日', 10), ('到期日', 10), ('贷款金额', 5), ('产品名称', 10), ('期限', 5), ('利率', 8), ('申请状态', 14)) self.main_list = MultiListbox(self.main_labelframe, self.main_list_item, height=22) self.main_list.grid(padx=10, pady=10, row=0, column=0) self.check_button = Button(self.main_labelframe, text='察看') def check_func(): apply_information = self.get_mutilistbox_choose() if not apply_information: MessageBox('当前申请', '请先选中一个申请消息') return self.apply_information_toplevel = ApplyInformationToplevel( self, apply_information) self.check_button['command'] = check_func self.check_button.grid(pady=10, row=1, column=0) def get_mutilistbox_choose(self): now = self.main_list.curselection() if not now: return None else: print 'now', self.main_list.get(now) number = self.main_list.get(now)[0] #return const.apply_information_list[int(now[0])] for apply_information in const.apply_information_list: if apply_information[15] == number: return apply_information def refresh_mutilistbox(self): self.main_list.delete(0, self.main_list.size()) self.add_item() def add_item(self): apply_list = show_apply_list() for p in apply_list: now_state = int(p[-1]) if now_state >= 5: p[-1] = '审核通过' elif now_state > int(const.user_type): p[-1] = '等待上级审核' elif now_state == int(const.user_type): p[-1] = '等待当前用户审核' elif now_state < int(const.user_type): continue self.main_list.insert(Tkinter.END, p) def pack_all(self): self.main_labelframe.pack()
def initUI(self): self.parent.title("IAF CALC 0.01") self.pack(fill=BOTH, expand=1) self.configure(background="white") frameTOP = Frame(self) frameTOP.config(bg="white") frameTOP.pack(side=TOP) frameFILES = Frame(frameTOP) frameFILES.pack(side=LEFT, padx=10) # --- BUTTON FOR FILE 1 --- # frameF1 = LabelFrame(frameFILES, text="Eyes open file:", relief=FLAT, borderwidth=1, background="white") frameF1.pack(fill=X, expand=1) self.nameF1 = Entry(frameF1, width=50) self.nameF1.config(bg="lightgray") self.nameF1.pack(side=LEFT) self.nameF1.delete(0, END) self.nameF1.insert(0, "") self.buttonLoadFile1 = Button(frameF1, text="...", command=self.askOpenFile1) self.buttonLoadFile1.pack(side=LEFT, padx=5, pady=5) # ----------------------- # # --- BUTTON FOR FILE 2 --- # frameF2 = LabelFrame(frameFILES, text="Eyes closed file:", relief=FLAT, borderwidth=1, background="white") frameF2.pack(fill=X, expand=1) self.nameF2 = Entry(frameF2, width=50) self.nameF2.config(bg="lightgray") self.nameF2.pack(side=LEFT) self.nameF2.delete(0, END) self.nameF2.insert(0, "") self.buttonLoadFile2 = Button(frameF2, text="...", command=self.askOpenFile2) self.buttonLoadFile2.pack(side=LEFT, padx=5, pady=5) # ----------------------- # # --- BUTTON FOR FILE OUTPUT --- # frameO = LabelFrame(frameFILES, text="Output directory:", relief=FLAT, borderwidth=1, background="white") frameO.pack(fill=X, expand=1) self.nameO = Entry(frameO, width=50) self.nameO.config(bg="lightgray") self.nameO.pack(side=LEFT) self.nameO.delete(0, END) self.nameO.insert(0, "") self.buttonSelectOutput = Button(frameO, text="...", command=self.askOutputDirectory) self.buttonSelectOutput.pack(side=LEFT, padx=5, pady=5) # -------------------------------# # self.pack() # self.pack(fill=Y, expand=1) # ---------- PSD PARAMETER SELECTION ---------- # framePARAM = Frame(frameTOP) framePARAM.config(bg="white") framePARAM.pack(side=LEFT, fill=X) frame = LabelFrame(framePARAM, text="PSD Parameters", relief=RIDGE, borderwidth=1, background="white") frame.pack(fill=BOTH, expand=1, side=TOP) wFs = Label(frame, text="Fs:", bg="white") wFs.pack(side=LEFT) self.inputFs = Entry(frame, width=5) self.inputFs.pack(side=LEFT, padx=5) self.inputFs.delete(0, END) self.inputFs.insert(0, "500") wWS = Label(frame, text="Window size:", bg="white") wWS.pack(side=LEFT) self.inputWinSize = Entry(frame, width=5) self.inputWinSize.pack(side=LEFT, padx=5) self.inputWinSize.delete(0, END) self.inputWinSize.insert(0, "1024") wOL = Label(frame, text="Overlap:", bg="white") wOL.pack(side=LEFT) self.inputOverlap = Entry(frame, width=5) self.inputOverlap.pack(side=LEFT, padx=5) self.inputOverlap.delete(0, END) self.inputOverlap.insert(0, "512") wWT = Label(frame, text="Window function:", bg="white") wWT.pack(side=LEFT) variable = StringVar(frame) variable.set("Hamming") # default value self.inputWinType = OptionMenu(frame, variable, "Hamming", "Bartlett", "Blackman", "Hanning", "None") self.inputWinType.config(bg="white", width=10) self.inputWinType.pack(side=LEFT) buttonRun = Button(frame, text="GO!", command=self.goTime) buttonRun.pack(side=RIGHT) # Channel selector frameCh = LabelFrame(framePARAM, text="Channels", relief=RIDGE, borderwidth=1, background="white") frameCh.pack(fill=BOTH, expand=1, side=TOP) self.EOch1 = IntVar() self.inputEOch1 = Checkbutton(frameCh, text="1", variable=self.EOch1, bg="white") self.inputEOch1.pack(side=LEFT) self.EOch2 = IntVar() self.inputEOch2 = Checkbutton(frameCh, text="2", variable=self.EOch2, bg="white") self.inputEOch2.pack(side=LEFT) self.EOch3 = IntVar() self.inputEOch3 = Checkbutton(frameCh, text="3", variable=self.EOch3, bg="white") self.inputEOch3.pack(side=LEFT) self.EOch4 = IntVar() self.inputEOch4 = Checkbutton(frameCh, text="4", variable=self.EOch4, bg="white") self.inputEOch4.pack(side=LEFT) self.EOch5 = IntVar() self.inputEOch5 = Checkbutton(frameCh, text="5", variable=self.EOch5, bg="white") self.inputEOch5.pack(side=LEFT) self.EOch6 = IntVar() self.inputEOch6 = Checkbutton(frameCh, text="6", variable=self.EOch6, bg="white") self.inputEOch6.pack(side=LEFT) self.EOch7 = IntVar() self.inputEOch7 = Checkbutton(frameCh, text="7", variable=self.EOch7, bg="white") self.inputEOch7.pack(side=LEFT) self.EOch8 = IntVar() self.inputEOch8 = Checkbutton(frameCh, text="8", variable=self.EOch8, bg="white") self.inputEOch8.pack(side=LEFT) # IAF Calculation parameters frameIAF = LabelFrame(framePARAM, text="IAF Search Limits", relief=RIDGE, borderwidth=1, background="white") frameIAF.pack(fill=BOTH, expand=1, side=TOP) labelLowBound = Label(frameIAF, text="Lower limit (Hz):", bg="white") labelLowBound.pack(side=LEFT) self.inputLowBound = Entry(frameIAF, width=5) self.inputLowBound.pack(side=LEFT, padx=5) self.inputLowBound.delete(0, END) self.inputLowBound.insert(0, "7") labelUpBound = Label(frameIAF, text="Upper limit (Hz):", bg="white") labelUpBound.pack(side=LEFT) self.inputUpBound = Entry(frameIAF, width=5) self.inputUpBound.pack(side=LEFT, padx=5) self.inputUpBound.delete(0, END) self.inputUpBound.insert(0, "14") self.GaussVar = IntVar() self.inputGauss = Checkbutton(frameIAF, text="Gauss", variable=self.GaussVar, bg="white") self.inputGauss.pack(side=LEFT) buttonRun = Button(frameIAF, text="IAF!", command=self.calculateIAF) buttonRun.pack(side=RIGHT) self.pack() # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # END OF TOP FRAME # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # my variables self.chSelect = 0 self.chOther = 0 self.P1 = ndarray(1) self.f1 = ndarray(1) self.P2 = ndarray(1) self.f2 = ndarray(1) self.filename1 = "..." self.filename2 = "..." self.IAF = 10 self.doGauss = True # FIGURE STUFF !!! self.Pmax = 0 self.Pmin = 0 self.Dmax = 0 self.Dmin = 0 frameBOTTOM = Frame(self) frameBOTTOM.config(bg="white") frameBOTTOM.pack(side=BOTTOM, pady=10) frameFig = LabelFrame(frameBOTTOM, text="Spectrum", relief=RIDGE, borderwidth=1, background="white") frameFig.pack(fill=X, expand=1, side=LEFT, padx=10) self.fig1 = matplotlib.figure.Figure(figsize=(7, 3), dpi=100) # ,frameon=False) self.fig1.set_facecolor("white") self.fig = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(self.fig1, master=frameFig) self.a1 = self.fig1.add_subplot(121) self.a2 = self.fig1.add_subplot(122) self.fig.show() self.fig.get_tk_widget().pack(side=BOTTOM) frameConfig = LabelFrame( frameBOTTOM, text="Filter configuration", relief=RAISED, borderwidth=1, background="white" ) frameConfig.pack(fill=BOTH, expand=1, side=RIGHT, padx=10) frameIAF = LabelFrame(frameConfig, text="Individual Alpha Frequency (IAF)") frameIAF.config(bg="white") frameIAF.pack(expand=1, side=TOP, padx=10) self.inputIAF = Entry(frameIAF, width=5) self.inputIAF.pack(side=LEFT, padx=5) self.inputIAF.delete(0, END) self.inputIAF.insert(0, "0") self.buttonWriteDefault = Button(frameIAF, text="Update Filters", command=self.updateFilters) self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5) frameFilters = LabelFrame(frameConfig, text="Filters", relief=RAISED, borderwidth=1, background="white") frameFilters.pack(fill=X, expand=1, side=TOP) # THETA FRAME frameTheta = LabelFrame(frameFilters, text="Theta", relief=RAISED, borderwidth=1, background="white") frameTheta.pack(expand=1, side=TOP, pady=5, padx=5) self.inputThetaLow = Entry(frameTheta, width=8) self.inputThetaLow.pack(side=LEFT, padx=5, pady=5) self.inputThetaLow.delete(0, END) self.inputThetaLow.insert(0, "0") self.inputThetaHigh = Entry(frameTheta, width=8) self.inputThetaHigh.pack(side=LEFT, padx=5, pady=5) self.inputThetaHigh.delete(0, END) self.inputThetaHigh.insert(0, "0") # BETA FRAME frameBeta = LabelFrame(frameFilters, text="Beta", relief=RAISED, borderwidth=1, background="white") frameBeta.pack(expand=1, side=TOP, pady=5, padx=5) self.inputBetaLow = Entry(frameBeta, width=8) self.inputBetaLow.pack(side=LEFT, padx=5, pady=5) self.inputBetaLow.delete(0, END) self.inputBetaLow.insert(0, "0") self.inputBetaHigh = Entry(frameBeta, width=8) self.inputBetaHigh.pack(side=LEFT, padx=5, pady=5) self.inputBetaHigh.delete(0, END) self.inputBetaHigh.insert(0, "0") # SMR FRAME frameSMR = LabelFrame(frameFilters, text="SMR", relief=RAISED, borderwidth=1, background="white") frameSMR.pack(expand=1, side=TOP, pady=5, padx=5) self.inputSMRLow = Entry(frameSMR, width=8) self.inputSMRLow.pack(side=LEFT, padx=5, pady=5) self.inputSMRLow.delete(0, END) self.inputSMRLow.insert(0, "0") self.inputSMRHigh = Entry(frameSMR, width=8) self.inputSMRHigh.pack(side=LEFT, padx=5, pady=5) self.inputSMRHigh.delete(0, END) self.inputSMRHigh.insert(0, "0") frameButtons = LabelFrame(frameConfig, text="Commands", relief=RAISED, borderwidth=1, background="white") frameButtons.pack(expand=1, side=BOTTOM) self.buttonWriteConfig = Button(frameButtons, text="Write Filters", command=self.writeFilters) self.buttonWriteConfig.pack(side=LEFT, padx=5, pady=5) self.buttonWriteDefault = Button(frameButtons, text="Reset to Defaults", command=self.resetIAFtoDefault) self.buttonWriteDefault.pack(side=LEFT, padx=5, pady=5) # self.buttonVisualize = Button(frameButtons, text="VIS",command=self.resetIAFtoDefault) # self.buttonVisualize.pack(side=LEFT,padx=5,pady=5) self.buttonPrintFig = Button(frameButtons, text="Print Figure", command=self.printFigureToFile) self.buttonPrintFig.pack(side=LEFT, padx=5, pady=5)
class BoardConfig(Frame): def __init__(self, master=None, main=None): Frame.__init__(self, master) self.parent = master self.main = main self.parent.geometry("336x424") self.parent.title(os.getenv("NAME") + " - Board Config") self.master.configure(padx=10, pady=10) self.intvar = IntVar() #Arch self.arch_var = IntVar() lf_arch = LabelFrame(self.parent, text="Architecture") lf_arch.pack(fill=X, expand=True, side=TOP) frame_arch = Frame(lf_arch) frame_arch.pack(fill=X, expand=True, side=TOP) frame_left1 = Frame(frame_arch) frame_left1.pack(expand=True, fill=BOTH, side=LEFT) frame_right1 = Frame(frame_arch) frame_right1.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_arch_8 = Radiobutton(frame_left1, text="8-bit ", anchor="w", width=10, value=8, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_8.pack(fill=X, side=TOP) self.radioButton_arch_32 = Radiobutton(frame_right1, text="32-bit", anchor="w", width=10, value=32, variable=self.arch_var, command=self.update_mode) self.radioButton_arch_32.pack(fill=X, side=TOP) #Mode self.mode_var = StringVar() lf_mode = LabelFrame(self.parent, text="Programming mode") lf_mode.pack(fill=X, expand=True, side=TOP) frame_mode = Frame(lf_mode) frame_mode.pack(fill=X, expand=True, side=TOP) frame_left2 = Frame(frame_mode) frame_left2.pack(expand=True, fill=BOTH, side=LEFT) frame_right2 = Frame(frame_mode) frame_right2.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_mode_icsp = Radiobutton(frame_left2, text="ICSP", anchor="w", width=10, value="icsp", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_icsp.pack(side=TOP, fill=X) self.radioButton_mode_bootloader = Radiobutton( frame_right2, text="Bootloader", anchor="w", width=10, value="bootloader", variable=self.mode_var, command=self.update_mode) self.radioButton_mode_bootloader.pack(side=TOP, fill=X) #Bootloader self.boot_var = StringVar() self.lf_boot = LabelFrame(self.parent, text="Bootloader") self.lf_boot.pack(fill=X, expand=True, side=TOP) frame_boot = Frame(self.lf_boot) frame_boot.pack(fill=X, expand=True, side=TOP) frame_left3 = Frame(frame_boot) frame_left3.pack(expand=True, fill=BOTH, side=LEFT) frame_right3 = Frame(frame_boot) frame_right3.pack(expand=True, fill=BOTH, side=RIGHT) self.radioButton_bootloader_v1_v2 = Radiobutton(frame_left3, text="v1.x or v2.x", anchor="w", width=10, value="v1_v2", variable=self.boot_var) self.radioButton_bootloader_v1_v2.pack(fill=X, side=TOP, expand=True) self.radioButton_bootloader_v4 = Radiobutton(frame_right3, text="v4.x", anchor="w", width=10, value="v4", variable=self.boot_var) self.radioButton_bootloader_v4.pack(fill=X, side=TOP, expand=True) #Devices 8bit self.dev8_var = StringVar() self.lf_dev8 = LabelFrame(self.parent, text="Devices") self.lf_dev8.pack(fill=X, expand=True, side=TOP) self.frame_8b = Frame(self.lf_dev8) self.frame_8b.pack(fill=X, expand=True, side=TOP) #Devices 32bit self.dev32_var = StringVar() self.lf_dev32 = LabelFrame(self.parent, text="Devices") self.lf_dev32.pack(fill=X, expand=True, side=TOP) self.frame_32b = Frame(self.lf_dev32) self.frame_32b.pack(fill=X, expand=True, side=TOP) frame_buttons = Frame(self.parent) Button(frame_buttons, text="Accept", command=self.accept_config).pack(fill=X, expand=True, side=RIGHT) Button(frame_buttons, text="Cancel", command=self.quit).pack(fill=X, expand=True, side=LEFT) frame_buttons.pack(fill=X, expand=True, side=BOTTOM) frame_advance = Frame(self.parent) self.advanceoptions = Button(frame_advance, text="Advance options", command=self.advance) self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) frame_advance.pack(fill=X, expand=True, side=BOTTOM) frame_warning = Frame(self.parent) self.label_warning = Label(frame_warning, fg="red", text="warning!", anchor="w") self.label_warning.pack(fill=X, expand=True, side=BOTTOM) frame_warning.pack(fill=X, expand=True, side=BOTTOM) self.build_devices_arch() self.load_config() self.init_groups() #---------------------------------------------------------------------- def quit(self): self.master.destroy() #---------------------------------------------------------------------- def build_devices_arch(self): #8bits name_checked = self.main.configIDE.config("Board", "board_8", "Pinguino 2550") arch_8 = filter(lambda board: board.arch == 8, self.main.pinguinoAPI._boards_) arch_8.sort() frame_left = Frame(self.frame_8b) frame_left.pack(expand=True, fill=BOTH, side=LEFT) frame_right = Frame(self.frame_8b) frame_right.pack(expand=True, fill=BOTH, side=RIGHT) parent = frame_left #left for board in arch_8: if arch_8.index(board) == (len(arch_8) / 2) + 1: parent = frame_right #rigth radio = Radiobutton( parent, text=board.name, anchor="w", width=10, value=board.name, variable=self.dev8_var, command=lambda: self.set_board_name(board.name, "8")) radio.pack(expand=True, fill=X, side=TOP) #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_8) #self.board_config.gridLayout_device_8.addWidget(radio, count, side, 1, 1) #radio.setText(board.name) #radio.setToolTip(board.proc) if name_checked == board.name: radio.select() #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "8")) #32bits name_checked = self.main.configIDE.config("Board", "board_32", "PIC32 Pinguino OTG") arch_32 = filter(lambda board: board.arch == 32, self.main.pinguinoAPI._boards_) arch_32.sort() frame_left0 = Frame(self.frame_32b) frame_left0.pack(expand=True, fill=BOTH, side=LEFT) frame_right0 = Frame(self.frame_32b) frame_right0.pack(expand=True, fill=BOTH, side=RIGHT) parent = frame_left0 #left for board in arch_32: if arch_32.index(board) == (len(arch_32) / 2) + 1: parent = frame_right0 #rigth radio = Radiobutton( parent, text=board.name, anchor="w", width=10, value=board.name, variable=self.dev32_var, command=lambda: self.set_board_name(board.name, "32")) radio.pack(expand=True, fill=X, side=TOP) #radio = QtGui.QRadioButton(self.board_config.groupBox_devices_32) #self.board_config.gridLayout_device_32.addWidget(radio, count, side, 1, 1) #radio.setText(board.name) #radio.setToolTip(board.proc) if name_checked == board.name: radio.select() #self.connect(radio, QtCore.SIGNAL("clicked()"), self.set_board_name(board.name, "32")) #---------------------------------------------------------------------- def load_config(self): self.main.configIDE.load_config() arch = self.main.configIDE.config("Board", "arch", 8) getattr(self.radioButton_arch_8, "select" if (arch == 8) else "deselect")() getattr(self.radioButton_arch_32, "select" if (arch == 32) else "deselect")() if arch == 32: self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) else: self.advanceoptions.forget() mode = self.main.configIDE.config("Board", "mode", "bootloader") getattr(self.radioButton_mode_bootloader, "select" if (mode == "bootloader") else "deselect")() getattr(self.radioButton_mode_icsp, "select" if (mode == "icsp") else "deselect")() bootloader = self.main.configIDE.config("Board", "bootloader", "v1_v2") getattr(self.radioButton_bootloader_v1_v2, "select" if (bootloader == "v1_v2") else "deselect")() getattr(self.radioButton_bootloader_v4, "select" if (bootloader == "v4") else "deselect")() self.update_mode() #---------------------------------------------------------------------- def update_mode(self): mode_boot = self.mode_var.get() == "bootloader" arch_8 = self.arch_var.get() == 8 if mode_boot and arch_8: self.lf_boot.pack(fill=X, expand=True, side=TOP) else: self.lf_boot.forget() self.init_groups() if not mode_boot: self.label_warning.configure( text="WARNING!! this mode can overwite the bootloader code.") else: self.label_warning.configure(text="") #---------------------------------------------------------------------- def set_board_name(self, name, arch): def dummy(): self.main.configIDE.set("Board", "board_" + arch, name) return dummy #---------------------------------------------------------------------- def init_groups(self): self.lf_dev32.forget() self.lf_dev8.forget() if self.arch_var.get() == 8: self.lf_dev8.pack(fill=X, expand=True, side=TOP) self.advanceoptions.forget() else: self.lf_dev32.pack(fill=X, expand=True, side=TOP) self.advanceoptions.pack(fill=X, expand=True, side=BOTTOM) #---------------------------------------------------------------------- def save_config(self): #if self.board_config.radioButton_arch_8.isChecked(): arch = 8 #else: arch = 32 self.main.configIDE.set("Board", "arch", self.arch_var.get()) #if self.board_config.radioButton_mode_bootloader.isChecked(): mode = "bootloader" #else: mode = "icsp" self.main.configIDE.set("Board", "mode", self.mode_var.get()) #if self.board_config.radioButton_bootloader_v1_v2.isChecked(): bootloader = "v1_v2" #else: bootloader = "v4" self.main.configIDE.set("Board", "bootloader", self.boot_var.get()) name = self.main.configIDE.config("Board", "board_" + str(self.arch_var.get()), None) self.main.configIDE.set("Board", "board", name) #---------------------------------------------------------------------- def accept_config(self): self.save_config() self.main.configIDE.save_config() self.main.statusbar_ide(self.main.get_status_board()) self.close_advance() self.quit() #---------------------------------------------------------------------- def advance(self): root = Toplevel() self.frame_advance = BoardConfigAdvance(master=root, main=self.main) self.frame_advance.mainloop() #---------------------------------------------------------------------- def close_advance(self): try: assert self.frame_advance except: return self.frame_advance.quit()
def sdListComplete(self, sdlist): top = self.top = Toplevel(self.app) top.title("SD Card Control") top.protocol('WM_DELETE_WINDOW', self.delTop) f = Frame(top, height=150, width=150) f.grid(row=1, column=1); self.tree = Treeview(f, height=12, selectmode='browse') self.tree.column("#0", minwidth=100) self.tree.bind("<<TreeviewSelect>>", self.treeSelect) self.sb = Scrollbar(f) self.sb.config(command=self.tree.yview) self.tree.config(yscrollcommand=self.sb.set) self.sb.pack(side=RIGHT, fill=Y) self.tree.pack(side=LEFT, fill=BOTH, expand=1) SDroot = SDDir('') for item in sdlist: if item.startswith('/'): cd = SDroot l = item[1:].split('/') for d in l[:-1]: ncd = cd.getDir(d) if ncd == None: ncd = cd.addDir(d) cd = ncd cd.addFile(l[-1], fqn=item) else: SDroot.addFile(item) SDroot.sortAll() self.fileMap = {} self.startFile = None self.loadDir(SDroot, '') bf = Frame(top, width=50) bf.grid(column=3, row=1) blf = LabelFrame(bf, text="Print from SD Card", width=48, height=40) self.bPrint = Button(blf, text='Print', command=self.doPrint, width = 6) self.bPrint.pack() blf.pack(fill='x') blf = LabelFrame(bf, text="Delete from SD Card", width=48, height=40) self.bDelete = Button(blf, text="Delete", command=self.doDelete, width=6) self.bDelete.pack() blf.pack(fill='x') blf = LabelFrame(bf, text="Upload to SD Card", width=48, height=180) self.upDir = Label(blf, text="Dir:", justify=LEFT) self.upDir.pack() ef = Frame(blf) l = Label(ef, text="File:", justify=LEFT) l.pack(side=LEFT) self.entry = Entry(ef, width=12) self.entry.pack(side=LEFT) fn = 'untitled.g' if self.app.GCodeFile: fn = os.path.basename(self.app.GCodeFile) if len(fn) > 8: fn = fn[0:8] fn += ".g" self.entry.delete(0, END) self.entry.insert(0, fn) ef.pack() self.bUpload = Button(blf, text="Upload", command=self.doUpload, width=6) self.bUpload.pack() blf.pack(fill='x') if self.app.printing or self.app.sdprinting: self.bPrint.config(state=DISABLED) self.bUpload.config(state=DISABLED) if not self.app.GCodeFile: self.bUpload.config(state=DISABLED) blf = Frame(bf) self.bExit = Button(blf, text='Exit', command=self.doExit, width=6) self.bExit.pack() blf.pack() if self.startFile: self.tree.selection_set(self.startFile) self.top.geometry("360x300+100+100")
class Screen(Observer): def __init__(self, parent, bg="white"): self.menu_bar = MenuBar(parent) self.canvas = Canvas(parent, bg=bg, name="screen") self.frameControl = Frame(parent) self.frameLabelSignals = LabelFrame(self.frameControl, text="Signaux", padx=20, pady=20) self.frameLabelMode = LabelFrame(self.frameControl, text="Mode", padx=20, pady=20) self.panelControl = ttk.Notebook(self.frameLabelSignals) self.checkbox_signalX = Checkbutton(self.frameLabelMode, text="Signal X") self.checkbox_signalY = Checkbutton(self.frameLabelMode, text="Signal Y") self.checkbox_XY = Checkbutton(self.frameLabelMode, text="XY") self.panel_control_page = [] # contient les références de mes curseurs for p in parent.get_models(): self.addPage(p.get_name()) def addPage(self, name): page = ttk.Frame(self.panelControl) self.panelControl.add(page, text='signal ' + name) visible_checkbox = Checkbutton(page, text="Afficher") magnitude = Scale(page, length=250, orient="horizontal", label="Amplitude", sliderlength=20, showvalue=0, from_=0, to=5, tickinterval=1, name="magnitudeScale") frequency = Scale(page, length=250, orient="horizontal", label="Frequency", sliderlength=20, showvalue=0, from_=0, to=25, tickinterval=5, name="frequencyScale") phase = Scale(page, length=250, orient="horizontal", label="Phase", sliderlength=20, showvalue=0, from_=0, to=20, tickinterval=5, name="phaseScale") visible_checkbox.pack(fill="x", pady=6) magnitude.pack(expand=1, fill="both", pady=6) frequency.pack(expand=1, fill="both", pady=6) phase.pack(expand=1, fill="both", pady=6) self.panel_control_page.append({ 'visible': visible_checkbox, 'magnitude': magnitude, 'frequency': frequency, 'phase': phase }) def update(self, model): if type(model) == list: for i, m in enumerate(model): signal = m.get_signal() #self.plot_signal(signal, m.get_color()) self.plot_signal(m) else: signal = model.get_signal() self.plot_signal(model) self.grid(6, 8) def get_panel_control_index(self): return self.panelControl.index('current') def get_canvas(self): return self.canvas def get_panel_control_page(self): return self.panel_control_page def get_magnitude(self, index): return self.panel_control_page[index]['magnitude'] def get_frequency(self, index): return self.panel_control_page[index]['frequency'] def get_phase(self, index): return self.panel_control_page[index]['phase'] def get_visible(self, index): return self.panel_control_page[index]['visible'] def get_checkbox_signalX(self): return self.checkbox_signalX def get_checkbox_signalY(self): return self.checkbox_signalY def get_checkbox_XY(self): return self.checkbox_XY def plot_signal(self, model): w, h = self.canvas.winfo_width(), self.canvas.winfo_height() width, height = int(w), int(h) signal = model.get_signal() name = model.get_name() color = model.get_color() if self.canvas.find_withtag("signal" + name): self.canvas.delete("signal" + name) if signal and len(signal) > 1 and model.is_visible(): plot = [(x * width, height / 2.0 * (y + 1)) for (x, y) in signal] self.canvas.create_line(plot, fill=color, smooth=1, width=3, tags="signal" + name) self.canvas.scale("signal" + name, width / 2, height / 2, 1.0, 0.25) def grid(self, row, col): w, h = self.canvas.winfo_width(), self.canvas.winfo_height() width, height = int(w), int(h) if self.canvas.find_withtag("grid"): self.canvas.delete("grid") # dessin des axes X et Y self.canvas.create_line(5, height / 2, width, height / 2, arrow="last", tags=('grid', 'axe-x')) self.canvas.create_line(width / 2, height - 5, width / 2, 5, arrow="last", tags=('grid', 'axe-y')) # dessin des lignes verticales for c in range(1, int(row / 2) + 1): stepW = width / row xd = width / 2 + c * stepW xg = width / 2 - c * stepW #Creation des lignes verticales self.canvas.create_line(xd, height - 5, xd, 5, dash=1, tags=('grid', 'vertical-line'), fill='grey') #cote droit self.canvas.create_line(xg, height - 5, xg, 5, dash=1, tags=('grid', 'vertical-line'), fill='grey') #cote gauche #Creation des tirets sur x self.canvas.create_line(xd, height / 2 - 4, xd, height / 2 + 4, tags=('grid', 'horizontal-line'), fill='grey') self.canvas.create_line(xg, height / 2 - 4, xg, height / 2 + 4, tags=('grid', 'horizontal-line'), fill='grey') # dessin des lignes horizontales for r in range(1, int(col / 2) + 1): stepH = height / col yB = height / 2 + r * stepH yH = height / 2 - r * stepH #Creation des lignes horizontales self.canvas.create_line(5, yB, width, yB, dash=1, tags=('grid', 'horizontal-line'), fill='grey') self.canvas.create_line(5, yH, width, yH, dash=1, tags=('grid', 'horizontal-line'), fill='grey') #Creation des tirets sur y self.canvas.create_line(width / 2 - 4, yB, width / 2 + 4, yB, tags=('grid', 'vertical-line'), fill='grey') self.canvas.create_line(width / 2 - 4, yH, width / 2 + 4, yH, tags=('grid', 'vertical-line'), fill='grey') def packing(self): self.menu_bar.pack(fill='x') self.canvas.pack(side=LEFT, expand=1, fill="both", padx=6, pady=6) self.panelControl.pack(side=RIGHT, expand=1, fill="both", pady=6) self.frameLabelSignals.pack(expand=1, fill="both") self.frameLabelMode.pack(expand=1, fill="both") self.checkbox_signalX.pack(side=LEFT) self.checkbox_signalY.pack(side=LEFT) self.checkbox_XY.pack(side=RIGHT) self.frameControl.pack(side=RIGHT, expand=1, fill="both", pady=6)
def __init__(self, statement, entry): """ instantiate a transaction window """ self.rules = statement.rules self.root = Tk() self.root.title('Manual Annotation') t = Frame(self.root, bd=2 * self.BORDER) # top stack: input file name f = Frame(t) caption = "File: " + statement.filename + ", line: " + \ str(statement.file_line) Label(f, text=caption).pack() f.pack(pady=self.PADDING) # middle stack: entry details f = Frame(t) f1 = LabelFrame(f, text="Date") self.date = Label(f1, text=entry.date) self.date.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f1 = LabelFrame(f, text="Amount") self.amount = Label(f1, text=entry.amount) self.amount.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f1 = LabelFrame(f, text="Account") self.acct = Text(f1, height=1, width=self.ACCT_WID) if entry.account is not None: self.acct.insert(END, entry.account) self.acct.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f1 = LabelFrame(f, text="Description") self.desc = Text(f1, height=1, width=self.DESC_WID) self.desc.insert(END, entry.description) self.desc.pack(padx=self.PADDING, pady=self.PADDING) f1.pack(side=LEFT, padx=self.PADDING) f.pack(pady=self.PADDING) # bottom stack: action buttons f = Frame(t) b = Button(f, text="Accept", command=self.accept) b.pack(side=LEFT, padx=self.PADDING) # account selection menu self.account = StringVar(f) self.account.set(entry.account) m = OptionMenu(f, self.account, *sorted(statement.acc_list), command=self.chooseAcct) m.pack(side=LEFT, padx=self.PADDING) # aggregate description selection menu self.description = StringVar(f) self.menu = OptionMenu(f, self.description, *sorted(statement.agg_list), command=self.chooseDesc) self.menu.pack(side=LEFT, padx=self.PADDING) b = Button(f, text="Delete", command=self.delete) b.pack(side=LEFT, padx=self.PADDING) f.pack(padx=self.PADDING, pady=self.PADDING) # finalize t.pack(side=TOP) self.entry = entry # default: return what we got