class MenuItem(object): def __init__(self, menu, title, **kwargs): self._menu = menu if kwargs.get('checkbox'): # Checkbox menu item self._checkvar = BooleanVar() self._checkvar.set(kwargs.get('checked', False)) self._menu._ctrl.add_checkbutton(label=title, command=self._on_check, variable=self._checkvar) else: # NOTE: For whatever reason, lambdas do not work in this case... self._menu._ctrl.add_command(label=title, command=self._on_click) if kwargs.get('on_click'): self.on_click = kwargs['on_click'] def _on_check(self): """Handler for keeping on_click virtual with checkbox option""" self.on_click(self._checkvar.get()) def _on_click(self): """Handler for keeping on_click virtual""" self.on_click() def on_click(self): pass def __exit__(self, *args): pass def __enter__(self, *args): return self
def cs_checkbox(root, r, c, label, boolval, box_conf={}, grid_conf={}): entrybl = BooleanVar() entrybl.set(boolval) checkbox = Checkbutton(master=root, text=label, onvalue=True, offvalue=False, variable=entrybl, **box_conf) checkbox.grid(row=r, column=c, **grid_conf) return entrybl
def test_invalid_value_domain(self): false = 0 if self.root.wantobjects() else "0" v = BooleanVar(self.root, name="name") with self.assertRaises(TclError): v.set("value") self.assertEqual(self.root.globalgetvar("name"), false) self.root.globalsetvar("name", "value") with self.assertRaises(TclError): v.get() self.root.globalsetvar("name", "1.0") with self.assertRaises(TclError): v.get()
def checkbutton_component(self, s, r, c, init_val=False, mode=NORMAL, onvalue=-1, offvalue=-1): '''adds a checkbutton, and its associated variable''' if onvalue == -1: var = BooleanVar() var.set(init_val) btn = Checkbutton(self,text=s, variable=var) else: var = StringVar() var.set(init_val) btn = Checkbutton(self,text=s, variable=var, onvalue=onvalue, offvalue=offvalue) btn.grid(row=r, column=c, columnspan=2, sticky=W) btn.config(state=mode) return var
def login_gui(username, password): def get_login(evt=None): temp_username = username_holder.get() temp_password = password_holder.get() if remember_login_holder.get(): logon_file = open("dep.dat", "w") logon_file.write(encodestring(temp_username+" "+temp_password)) logon_file.close() elif os.path.isfile("dep.dat"): os.remove("dep.dat") login_tk.destroy() wrap.login(temp_username, temp_password) overview_gui() return def on_checkbox_flip(): if remember_login_holder.get(): logon_file = open("dep.dat", "w") logon_file.write(encodestring(username_holder.get()+" "+password_holder.get())) logon_file.close() else: if os.path.isfile("dep.dat"): os.remove("dep.dat") return login_tk = Tk() login_tk.title("Login Window") Label(login_tk, text="Login to GradeSpeed").pack(padx=50, pady=(10, 5)) Label(login_tk, text="Username:"******"<Key-Return>", get_login) Label(login_tk, text="Password:"******"*") password_field.pack(padx=50, pady=(0, 5)) password_field.bind("<Key-Return>", get_login) remember_login_holder = BooleanVar() remember_login_holder.set(len(username) > 0) login_frame = Frame(login_tk) Checkbutton(login_frame, text="Remember Logon", var=remember_login_holder, command=on_checkbox_flip).pack() login_frame.pack(pady=5) Button(text="Login", command=get_login).pack(padx=50, pady=(5, 10)) center_gui(login_tk) login_tk.mainloop()
def insert_checkbutton(self, text, frame_name, side, varname, stick=None, default=None, callback=None): """Inserts a check button widget in the specified frame. ARGS: * var: a TKinter supported variable, such as IntVar(), StrVar(), and etc.""" # create a variable for this task var = BooleanVar() if default is not None: var.set(default) # create the widget frame = self.frames[frame_name] check = Checkbutton(frame, text=text, variable=var, command=callback) check.pack(side=self.TkSide[side], anchor=stick) # save data regarding the widget if self.checkbuttons.get(frame_name, None) == None: self.checkbuttons[frame_name] = {} self.checkbuttons[frame_name][varname] = {'button':check, 'var':var}
class Example(Frame): def __init__(self,parent): Frame.__init__(self,parent) self.parent = parent self.initUI() def initUI(self): self.parent.title("CheckButton") self.pack(fill=BOTH,expand=True) self.var = BooleanVar() self.var.set(False) chbt = Checkbutton(self,text="Show Title", variable=self.var,command=self.onClick) #chbt.select() chbt.place(x=50,y=50) def onClick(self): if self.var.get() == True: self.master.title("CheckButton") else: self.master.title("NOT!!")
def checkbutton_component(self, s, r, c, init_val=False, mode=NORMAL, onvalue=-1, offvalue=-1): '''adds a checkbutton, and its associated variable''' if onvalue == -1: var = BooleanVar() var.set(init_val) btn = Checkbutton(self, text=s, variable=var) else: var = StringVar() var.set(init_val) btn = Checkbutton(self, text=s, variable=var, onvalue=onvalue, offvalue=offvalue) btn.grid(row=r, column=c, columnspan=2, sticky=W) btn.config(state=mode) return var
def set_tk_var(): global method method = StringVar() method.set(read_config("Config", "Method", "str")) global server server = StringVar() server.set(read_config("Config", "Server", "str")) global shelltype shelltype = StringVar() shelltype.set(read_config("Config", "ShellType", "str")) global parameter parameter = StringVar() parameter.set(read_config("Config", "Parameter", "str")) global thread_num thread_num = IntVar() thread_num.set(read_config("Config", "ThreadNumber", "int")) global req_delay req_delay = DoubleVar() req_delay.set(read_config("Config", "RequestDelay", "float")) global time_out time_out = DoubleVar() time_out.set(read_config("Config", "RequestTimeout", "float")) global random_ua random_ua = BooleanVar() random_ua.set(read_config("Config", "RandomUserAgent", "boolean")) global con_close con_close = BooleanVar() con_close.set(read_config("Config", "ConnectionClose", "boolean")) global keep_alive keep_alive = BooleanVar() keep_alive.set(read_config("Config", "KeepAlive0", "boolean")) global custom_hdr custom_hdr = BooleanVar() custom_hdr.set(read_config("Config", "CustomRequestHeader", "boolean")) global custom_hdr_data custom_hdr_data = StringVar() custom_hdr_data.set(read_config("Config", "CustomRequestHeaderData", "str"))
def test_set(self): true = 1 if self.root.wantobjects() else "1" false = 0 if self.root.wantobjects() else "0" v = BooleanVar(self.root, name="name") v.set(True) self.assertEqual(self.root.globalgetvar("name"), true) v.set("0") self.assertEqual(self.root.globalgetvar("name"), false) v.set(42) self.assertEqual(self.root.globalgetvar("name"), true) v.set(0) self.assertEqual(self.root.globalgetvar("name"), false) v.set(42L) self.assertEqual(self.root.globalgetvar("name"), true) v.set(0L) self.assertEqual(self.root.globalgetvar("name"), false) v.set("on") self.assertEqual(self.root.globalgetvar("name"), true) v.set(u"0") self.assertEqual(self.root.globalgetvar("name"), false) v.set(u"on") self.assertEqual(self.root.globalgetvar("name"), true)
class SearchEngine: def __init__(self, root): self.root = root # State shared by search, replace, and grep; # the search dialogs bind these to UI elements. self.patvar = StringVar(root) # search pattern self.revar = BooleanVar(root) # regular expression? self.casevar = BooleanVar(root) # match case? self.wordvar = BooleanVar(root) # match whole word? self.wrapvar = BooleanVar(root) # wrap around buffer? self.wrapvar.set(1) # (on by default) self.backvar = BooleanVar(root) # search backwards? # Access methods def getpat(self): return self.patvar.get() def setpat(self, pat): self.patvar.set(pat) def isre(self): return self.revar.get() def iscase(self): return self.casevar.get() def isword(self): return self.wordvar.get() def iswrap(self): return self.wrapvar.get() def isback(self): return self.backvar.get() # Higher level access methods def getcookedpat(self): pat = self.getpat() if not self.isre(): pat = re.escape(pat) if self.isword(): pat = r"\b%s\b" % pat return pat def getprog(self): pat = self.getpat() if not pat: self.report_error(pat, "Empty regular expression") return None pat = self.getcookedpat() flags = 0 if not self.iscase(): flags = flags | re.IGNORECASE try: prog = re.compile(pat, flags) except re.error, what: try: msg, col = what except: msg = str(what) col = -1 self.report_error(pat, msg, col) return None return prog
class MenuBar(Menu): def __init__(self, master, visible=True): self.root = master Menu.__init__(self, master.root) self.sc3_plugins = BooleanVar() self.sc3_plugins.set(SC3_PLUGINS) self.listening = BooleanVar() self.listening.set(False) # Set font self.config(font="CodeFont") # File menu filemenu = Menu(self, tearoff=0) filemenu.add_command(label="New Document", command=self.root.newfile, accelerator="Ctrl+N") filemenu.add_command(label="Open", command=self.root.openfile, accelerator="Ctrl+O") filemenu.add_command(label="Save", command=self.root.save, accelerator="Ctrl+S") filemenu.add_command(label="Save As...", command=self.root.saveAs) self.add_cascade(label="File", menu=filemenu) # Edit menu editmenu = Menu(self, tearoff=0) editmenu.add_command(label="Undo", command=self.root.undo, accelerator="Ctrl+Z") editmenu.add_command(label="Redo", command=self.root.redo, accelerator="Ctrl+Y") editmenu.add_separator() editmenu.add_command(label="Cut", command=self.root.edit_cut, accelerator="Ctrl+X") editmenu.add_command(label="Copy", command=self.root.edit_copy, accelerator="Ctrl+C") editmenu.add_command(label="Paste", command=self.root.edit_paste, accelerator="Ctrl+V") editmenu.add_command(label="Select All", command=self.root.selectall, accelerator="Ctrl+A") editmenu.add_separator() editmenu.add_command(label="Increase Font Size", command=self.root.zoom_in, accelerator="Ctrl+=") editmenu.add_command(label="Decrease Font Size", command=self.root.zoom_out, accelerator="Ctrl+-") editmenu.add_separator() editmenu.add_command(label="Toggle Menu", command=self.root.toggle_menu, accelerator="Ctrl+M") editmenu.add_checkbutton(label="Toggle Window Transparency", command=self.root.toggle_transparency, variable=self.root.transparent) self.add_cascade(label="Edit", menu=editmenu) # Code menu ctrl = "Command" if SYSTEM == MAC_OS else "Ctrl" # Note: Alt renders properly to look like Option, so we don't need a # conditional for those shortcuts codemenu = Menu(self, tearoff=0) codemenu.add_command(label="Evaluate Block", command=self.root.exec_block, accelerator="{}+Return".format(ctrl)) codemenu.add_command(label="Evaluate Line", command=self.root.exec_line, accelerator="Alt+Return") codemenu.add_command(label="Clear Scheduling Clock", command=self.root.killall, accelerator="{}+.".format(ctrl)) codemenu.add_separator() codemenu.add_command(label="Toggle Console", command=self.root.toggle_console) codemenu.add_command(label="Export Console Log", command=self.root.export_console) codemenu.add_separator() codemenu.add_checkbutton(label="Use SC3 Plugins", command=self.root.toggle_sc3_plugins, variable=self.sc3_plugins) codemenu.add_separator() codemenu.add_checkbutton(label="Listen for connections", command=self.allow_connections, variable=self.listening) self.add_cascade(label="Language", menu=codemenu) # Help helpmenu = Menu(self, tearoff=0) helpmenu.add_command(label="Visit FoxDot Homepage", command=self.root.openhomepage) helpmenu.add_command(label="Documentation", command=self.root.opendocumentation) helpmenu.add_separator() helpmenu.add_command(label="Open Samples Folder", command=self.root.open_samples_folder) helpmenu.add_command(label="Open config file (advanced)", command=self.root.open_config_file) ## settingsmenu.add_command(label="Change Colours...", command=self.root.toggleMenu) self.add_cascade(label="Help & Settings", menu=helpmenu) # Tutorials tutorialmenu = Menu(self, tearoff=0) for tutorial in GET_TUTORIAL_FILES(): filename = os.path.basename(tutorial).replace(".py", "") data = filename.split("_") num = data[0] name = " ".join(data[1:]).title() tutorialmenu.add_command(label="Load Tutorial {}: {}".format( num, name), command=partial(self.root.loadfile, tutorial)) self.add_cascade(label="Tutorials", menu=tutorialmenu) # Add to root self.visible = visible if self.visible: master.root.config(menu=self) def toggle(self): self.root.root.config(menu=self if not self.visible else 0) self.visible = not self.visible return def allow_connections(self): """ Starts a new instance of ServerManager.TempoServer and connects it with the clock """ if self.listening.get() == True: Clock = FoxDotCode.namespace["Clock"] Clock.start_tempo_server(TempoServer) print("Listening for connections on {}".format(Clock.tempo_server)) else: Clock = FoxDotCode.namespace["Clock"] Clock.kill_tempo_server() print("Closed connections") return
def __init__(self, master): # Master Window self.master = master master.title("colmaUI") source_text = StringVar() source_text.set(self.getClipboardData()) output_text = StringVar() output_text.set('') self.refresh_button = Button( master, text="Paste", command=lambda: source_text.set(self.getClipboardData()), anchor='w') self.refresh_button.pack() self.refresh_button = Button( master, text="Reset", command=lambda: source_text.set(output_text.get())) self.refresh_button.pack() self.label = Label(master, textvar=source_text, justify='left', width=10, height=10, relief='groove') self.label.pack(expand='yes', fill='both') # Spaces between Elements add_spaces = BooleanVar() add_spaces.set(1) self.space_check = Checkbutton(master, text="Add spaces between each value", variable=add_spaces, anchor='w') self.space_check.pack() # Quoting use_quotes = BooleanVar() use_quotes.set(0) self.quote_check = Checkbutton( master, text="Surround each element with quotes", variable=use_quotes) self.quote_check.pack() # One line output preserve_lines = BooleanVar() preserve_lines.set(False) self.line_check = Checkbutton(master, text="Don't strip new lines", variable=preserve_lines) self.line_check.pack() # Split on comma instead of newline reverse = BooleanVar() reverse.set(0) self.rev_check = Checkbutton(master, text="Reverse From CSV to Column", variable=reverse) self.rev_check.pack() order_alpha = BooleanVar() order_alpha.set(0) self.order_check = Checkbutton(master, text="Sort alphabetically", variable=order_alpha) self.order_check.pack() unique_only = BooleanVar() unique_only.set(0) self.unique_check = Checkbutton(master, text="Unique Values", variable=unique_only) self.unique_check.pack() skip_header = BooleanVar() skip_header.set(0) self.header_check = Checkbutton(master, text="Skip Header", variable=skip_header) self.header_check.pack() self.label = Label(master, textvar=output_text, justify='left', width=10, height=10, relief='groove') self.label.pack(expand='yes', fill='both') self.go_button = Button( master, text="Process", command=lambda: output_text.set( self.flattenAndJoin(source_text, add_spaces, use_quotes, preserve_lines, reverse, unique_only, order_alpha, skip_header))) self.go_button.pack() self.copy_button = Button( master, text="Copy", command=lambda: self.setClipboardData(output_text.get())) self.copy_button.pack() self.close_button = Button(master, text="Quit", command=master.quit) self.close_button.pack()
class Studio(Frame): """The Studio class is a GUI for the digital library.""" _meter = None _grid = None _dual_box = None _auto_queue = None _entry = None _search_results = None _selected_cart = None def __init__(self): """Construct a Studio window.""" Frame.__init__(self) # make the window resizable top = self.master.winfo_toplevel() for row in range(2, GRID_ROWS + 2): for col in range(0, GRID_COLS): top.rowconfigure(row, weight=1) top.columnconfigure(col, weight=1) self.rowconfigure(row, weight=1) self.columnconfigure(col, weight=1) # initialize the title title = Label(self.master, font=FONT_TITLE, text=TEXT_TITLE) title.grid(row=0, column=0, columnspan=GRID_COLS) # initialize the meter self._meter = Meter(self.master, METER_WIDTH, self._get_meter_data) self._meter.grid(row=1, column=0, columnspan=GRID_COLS) # initialize the cart grid self._grid = Grid(self, GRID_ROWS, GRID_COLS, True, self._cart_start, self._cart_stop, self._cart_end, self.add_cart) # initialize the dual box self._dual_box = DualBox(self) self._dual_box.grid(row=GRID_ROWS + 2, column=0, columnspan=4) # intialize the auto-queue control self._auto_queue = BooleanVar() self._auto_queue.set(False) control = Frame(self.master, bd=2, relief=Tkinter.SUNKEN) Checkbutton(control, text=TEXT_AUTOSLOT, variable=self._auto_queue, onvalue=True, offvalue=False).pack(anchor=Tkinter.NW) control.grid(row=GRID_ROWS + 2, column=4, columnspan=GRID_COLS - 4) # initialize the search box, button Label(control, font=FONT, text=TEXT_SEARCHBOX).pack(anchor=Tkinter.NW) self._entry = Entry(control, takefocus=True, width=45) self._entry.bind("<Return>", self.search) # self._entry.grid(row=GRID_ROWS + 3, column=0, columnspan=5) self._entry.pack(anchor=Tkinter.NW) self._entry.focus_set() button = Button(control, text=TEXT_SEARCH, command=self.search) # button.grid(row=GRID_ROWS + 3, column=5) button.pack(anchor=Tkinter.S) # begin the event loop self.master.protocol("WM_DELETE_WINDOW", self.master.destroy) self.master.title(TEXT_TITLE) self.master.mainloop() def _search_internal(self): """Search the digital library in a separate thread.""" query = self._entry.get() if len(query) >= 3: print "Searching library with query \"%s\"..." % query self._search_results = database.search_library(query) self._dual_box.fill(self._search_results) print "Found %d results." % len(self._search_results) def search(self, *args): """Search the digital library. :param args """ thread.start_new_thread(self._search_internal, ()) def select_cart(self, index): """Select a cart from the search results. :param index: index of cart in search results """ if index is not None: self._selected_cart = self._search_results[index] def add_cart(self, key): """Add the selected cart to the grid. :param key """ if not self._grid.has_cart(key) and self._selected_cart is not None: self._grid.set_cart(key, self._selected_cart) def _cart_start(self): """Start the meter when a cart starts.""" self._meter.start() def _cart_stop(self): """Reset the meter when a cart stops.""" self._meter.reset() def _cart_end(self, key): """Reset the meter when a cart ends. Also, if auto-queue is enabled, queue the next cart. :param key """ self._meter.reset() if self._auto_queue.get(): next_key = get_next_key(GRID_ROWS, GRID_COLS, key) if self._grid.has_cart(next_key): self._grid.start(next_key) def _get_meter_data(self): """Get meter data for the currently active cart.""" return self._grid.get_active_cell().get_cart().get_meter_data()
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()
lbl3 = Label(window, text="input text", font=("Arial", 12)) lbl3.grid(column=2, row=2) btn2 = Button(window, text="show text", bg="blue", fg="red", command=show_text) btn2.grid(column=1, row=2) ''' combox ''' combo = Combobox(window) combo['values'] = (1, 2, 3, 4, 5, "Text") combo.current(1) #set the selected item combo.grid(column=0, row=3) val = combo.get() # print(val) chk_state = BooleanVar() chk_state.set(False) #set check state chk = Checkbutton(window, text='Choose', var=chk_state) chk.grid(column=1, row=3) ''' radiobutton ( [1] [2] [3] button )''' selected = IntVar() rad1 = Radiobutton(window, text='First', value=1, variable=selected) rad2 = Radiobutton(window, text='Second', value=2, variable=selected) rad3 = Radiobutton(window, text='Third', value=3, variable=selected) def clicked(): print(selected.get()) btn = Button(window, text="Click Me", command=clicked)
class Example(Frame): ####################################################################### def __init__(self, parent): Frame.__init__(self, width=1000, height=1000, background="green") self.parent = parent self.pack(fill=BOTH, expand=True) self.initUI() def initUI(self): self.parent.title("Cravis_ver1") self.pack(fill=BOTH, expand=1) frame = Frame(self, width=1500, height=200, relief=RAISED, borderwidth=1) frame.pack(expand=False) #frame.config(bg="blue") self.pack(expand=False) ##### ##### frame2 = Frame(self, width=1500, height=300, relief=RAISED, borderwidth=1) frame2.pack(expand=False) self.pack(expand=False) self.var0 = BooleanVar() self.var1 = BooleanVar() self.var2 = BooleanVar() self.var3 = BooleanVar() self.var4 = BooleanVar() self.var5 = BooleanVar() self.content = IntVar() reset_Area_Button = Button(self, width=10, text="reset_Area", command=self.reset_Area) reset_Area_Button.place(x=610, y=400) set_Area_Button = Button(self, width=10, text="set_Area", command=self.set_Area) set_Area_Button.place(x=610, y=430) show_Area_Button = Button(self, width=10, text="show_Area", command=self.show_Area) show_Area_Button.place(x=610, y=460) quitButton = Button(self, text="Quit", command=self.off_video) quitButton.place(x=50, y=20) startButton = Button(self, text="Video", command=self.on_start) startButton.place(x=100, y=20) TakePicButton = Button(self, text="TakePic", command=self.Takepic) TakePicButton.place(x=150, y=20) LoadDataButton = Button(self, text="Load_Data", bg="green", command=self.confirm_LoadData) LoadDataButton.place(x=550, y=90) SaveDataButton = Button(self, text="Save_Data", bg="green", command=self.confirm_SaveData) SaveDataButton.place(x=550, y=120) ###### cb1 = Checkbutton(self, text="Binary", variable=self.var1, command=self.on_Binary) cb1.place(x=80, y=50) cb2 = Checkbutton(self, text="Partical", variable=self.var2, command=self.on_Partical) cb2.place(x=80, y=80) cb3 = Checkbutton(self, text="Sobel", variable=self.var3, command=self.on_Sobel) cb3.place(x=80, y=110) cb4 = Checkbutton(self, text="Median", variable=self.var4, command=self.on_Median) cb4.place(x=80, y=140) cb5 = Checkbutton(self, text="Level_Adjust", variable=self.var5, command=self.on_LevelAdjust) cb5.place(x=80, y=170) cb5 = Checkbutton(self, text="SaveImage", variable=self.var0) cb5.place(x=550, y=20) ##### ################################### AdjustBinaryButton = Button(self, text="Adjust_Binary", command=self.AdjustBinary) AdjustBinaryButton.place(x=340, y=50) AdjustExtractButton = Button(self, text="Adjust_Extract", command=self.AdjustExtract) AdjustExtractButton.place(x=340, y=80) AdjustBinaryButton = Button(self, text="Adjust_3", command=self.AdjustBinary) AdjustBinaryButton.place(x=340, y=110) AdjustExtractButton = Button(self, text="Adjust_4", command=self.AdjustExtract) AdjustExtractButton.place(x=340, y=140) AdjustExtractButton = Button(self, text="Adjust_5", command=self.AdjustExtract) AdjustExtractButton.place(x=340, y=170) ######## self.infor_Alg1 = Text(self, width=40, height=1) #self.infor_Alg1.pack(side=LEFT) self.infor_Alg1.place(x=130, y=250) #thongtin_Alg1="Binary : " #self.infor_Alg1.insert(END,thongtin_Alg1) self.label_Alg1 = Label(self, text="Binary: ") self.label_Alg1.place(x=50, y=250) ## self.infor_Alg2 = Text(self, width=40, height=1) #self.infor_Alg2.pack(side=LEFT) self.infor_Alg2.place(x=130, y=270) #thongtin_Alg2="Extract : " #self.infor_Alg2.insert(END,thongtin_Alg2) self.label_Alg2 = Label(self, text="Extract: ") self.label_Alg2.place(x=50, y=270) ## self.infor_Alg3 = Text(self, width=40, height=1) #self.infor_Alg3.pack() self.infor_Alg3.place(x=130, y=290) #thongtin_Alg3="Alg_3 : " #self.infor_Alg3.insert(END,thongtin_Alg3) self.label_Alg3 = Label(self, text="Alg3: ") self.label_Alg3.place(x=50, y=290) ## self.infor_Alg4 = Text(self, width=40, height=1) #self.infor_Alg4.pack(side=LEFT) self.infor_Alg4.place(x=130, y=310) #thongtin_Alg4="Alg_4 : " #self.infor_Alg4.insert(END,thongtin_Alg4) self.label_Alg4 = Label(self, text="Alg4: ") self.label_Alg4.place(x=50, y=310) ## self.infor_Alg5 = Text(self, width=40, height=1) #self.infor_Alg5.pack() self.infor_Alg5.place(x=130, y=330) #thongtin_Alg5="Alg_5 : " #self.infor_Alg5.insert(END,thongtin_Alg5) self.label_Alg5 = Label(self, text="Alg5: ") self.label_Alg5.place(x=50, y=330) ## self.infor_Area1 = Text(self, width=20, height=1) self.infor_Area1.place(x=100, y=400) #thongtin_Area1="Area1:" #self.infor_Area1.insert(END,thongtin_Area1) self.label_Area1 = Label(self, text="Area1: ") self.label_Area1.place(x=50, y=400) ## self.infor_Area2 = Text(self, width=20, height=1) self.infor_Area2.place(x=350, y=400) #thongtin_Area2="Area2:" #self.infor_Area2.insert(END,thongtin_Area2) self.label_Area2 = Label(self, text="Area2: ") self.label_Area2.place(x=300, y=400) ## self.infor_Area3 = Text(self, width=20, height=1) self.infor_Area3.place(x=100, y=450) #thongtin_Area3="Area3:" #self.infor_Area3.insert(END,thongtin_Area3) self.label_Area3 = Label(self, text="Area3: ") self.label_Area3.place(x=50, y=450) ## self.infor_Area4 = Text(self, width=20, height=1) self.infor_Area4.place(x=350, y=450) #thongtin_Area4="Area4:" #self.infor_Area4.insert(END,thongtin_Area4) self.label_Area4 = Label(self, text="Area4: ") self.label_Area4.place(x=300, y=450) ##### ################################ self.infor = Text(self, width=50, height=2) self.infor.pack() thongtin = "CHAO MUNG DEN VOI CHUONG TRINH CRAVIS_V1 \n DESIGN BY VISUAL GROUP" self.infor.insert(END, thongtin) ################################### menuBar = Menu(self.parent) self.parent.config(menu=menuBar) fileMenu1 = Menu(menuBar) fileMenu2 = Menu(menuBar) fileMenu3 = Menu(menuBar) fileMenu1.add_command(label="zoom", command=self.zoom) fileMenu1.add_command(label="password", command=self.zoom) fileMenu1.add_command(label="2", command=self.onExit) fileMenu1.add_command(label="3", command=self.onExit) fileMenu2.add_command(label="Exit", command=self.onExit) fileMenu2.add_command(label="1", command=self.onExit) fileMenu2.add_command(label="2", command=self.onExit) fileMenu2.add_command(label="3", command=self.onExit) fileMenu3.add_command(label="help", command=self.file_help) fileMenu3.add_command(label="1", command=self.onExit) fileMenu3.add_command(label="2", command=self.onExit) fileMenu3.add_command(label="3", command=self.onExit) menuBar.add_cascade(label="File", menu=fileMenu1) menuBar.add_cascade(label="Infor", menu=fileMenu2) menuBar.add_cascade(label="Help", menu=fileMenu3) ###### ####### ################################################ function for menu def onScale_H(self, val): v = int(float(val)) self.varHigh.set(v) print(v) #self.varHigh.set(v) def onScale_L(self, val): v = int(float(val)) self.varLow.set(v) print(v) ### def onScale_R_L(self, val): v = int(float(val)) self.varRed_L.set(v) print(v) def onScale_R_H(self, val): v = int(float(val)) self.varRed_H.set(v) print(v) def onScale_G_L(self, val): v = int(float(val)) self.varGreen_L.set(v) print(v) def onScale_G_H(self, val): v = int(float(val)) self.varGreen_H.set(v) print(v) def onScale_B_L(self, val): v = int(float(val)) self.varBlue_L.set(v) print(v) def onScale_B_H(self, val): v = int(float(val)) self.varBlue_H.set(v) print(v) ### def on_Select(self, val): sender = val.widget idx = sender.curselection() value = sender.get(idx) self.varSelect.set(value) def onExit(self): self.quit() def file_help(self): f = open('a.txt', 'w+') #line=f.readline() infor = "1111111111111\n 2222222222222222222\n333333333333333" f.write(infor) line = f.readline() for line in f: print(line) def zoom(self): root.geometry("1500x500") ###################################################### ############ Algorithm def on_Binary(self): if self.var1.get() == True: print("Binary") self.show_Binary() #show window else: print("No_Binary") if hasattr(self, 'ThExtract'): print "dsfsdfds" self.ThBinary.withdraw() else: print "dddddddd" #self.ThBinary.withdraw() def on_Partical(self): if self.var2.get() == True: print("Partical") self.show_Extract() else: print("No_Partical") self.ThExtract.withdraw() def on_Sobel(self): if self.var3.get() == True: print("Sobel") else: print("No_Sobel") def on_Median(self): if self.var4.get() == True: print("Median") else: print("No_Median") def on_LevelAdjust(self): if self.var5.get() == True: print("LevAd") else: print("No_LevAd") def showvideo(self): if camera.resolution == (400, 300): print("ok") cwgt.camera.start_preview() ############################################################################### button to analyse image def Takepic(self): ## take pic button src = Frame(cwgt, width=400, height=300, relief=RAISED, borderwidth=1) src = camera.capture('src.png') analysed = camera.capture('analysed.png') if self.var0.get() == 1: camera.capture("/home/pi/Desktop/New/{0:%Y%m%d-%H%M%S}.png".format( datetime.now())) #'{0:%Y%m%d-%H%M%S}: start.'.format(datetime.now()) #img_abc=PhotoImage(file="src.png") #h=img_abc.width() #w=img_abc.height() #print h,w #cv2.imwrite("src.png",src) #img_abc = cv2.imread("img.png",cv2.IMREAD_COLOR) #cv2.rectangle(img_abc,(50,50),(100,50),(255,0,0),15) #cv2.imwrite("out2.png",img_abc) img_origin = PhotoImage(file="src.png") cwgt2.img = img_origin cwgt2.create_image(200, 200, image=img_origin) h = img_origin.width() w = img_origin.height() #print h,w #px=img[55,55] #img_new=cv2.imread("out2.png") #pix=img_new[2,2] #pix0=img_new[2,2][0] #pix1=img_new[2,2][1] #pix2=img_new[2,2][2] #print pix,pix0,pix1,pix2 #for j in range (0,h): # for i in range (0,w): # if img_new[i,j] #img_new[i,i]=[255,255,255] #pix__=img_new[2,2][0] #print pix__ #cv2.imwrite("out3.png",img_new) #img_x=PhotoImage(file="out3.png") #cwgt2.img=img_x #cwgt2.create_image(200, 200, image=img_x) #if self.var1.get() == True: #src=cv2.imread("src.png") #res=cv2.Canny(src,self.varLow.get(), self.varHigh.get()) #retval,res = cv2.threshold(src, self.varLow.get(), self.varHigh.get(), cv2.THRESH_BINARY) #cv2.imwrite("analysed.png",res) if self.var2.get() == True: min_R = self.varRed_L.get() max_R = self.varRed_H.get() min_G = self.varGreen_L.get() max_G = self.varGreen_H.get() min_B = self.varBlue_L.get() max_B = self.varBlue_H.get() pro_2 = cv2.imread('analysed.png') #hsv = cv2.cvtColor(src,cv2.COLOR_BGR2HSV) lower = np.array([min_B, min_G, min_R], np.uint8) upper = np.array([max_B, max_G, max_R], np.uint8) mask = cv2.inRange(pro_2, lower, upper) analysed = cv2.bitwise_and(pro_2, pro_2, mask=mask) cv2.imwrite("analysed.png", analysed) #cv2.imshow('aaa',src) # #img2=PhotoImage(file="out.png") #cwgt.img2=img2 #cwgt.create_image(200, 200, image=img2) #cv2.imwrite("out3.png",img_new) img_show = PhotoImage(file="analysed.png") cwgt.img = img_show cwgt.create_image(200, 200, image=img_show) if self.var1.get() == True: src = cv2.imread("analysed.png") #analysed=cv2.Canny(src,self.varLow.get(), self.varHigh.get()) retval, res = cv2.threshold(src, self.varLow.get(), self.varHigh.get(), cv2.THRESH_BINARY) cv2.imwrite("analysed.png", res) if self.var5.get() == True: src = cv2.imread("analysed.png") number = 0 for j in range(self.x0_1, self.x1_1): for i in range(self.y0_1, self.y1_1): if src[i, j][0] > 0 and src[i, j][1] > 0 and src[i, j][2] > 0: src[i, j] = [255, 255, 255] number = number + 1 print number if number > 180: tkMessageBox.showinfo(title="OK", message="OK") else: tkMessageBox.showinfo(title="ng", message="ng") cv2.imwrite("analysed.png", src) img_show = PhotoImage(file="analysed.png") cwgt.img = img_show cwgt.create_image(200, 200, image=img_show) #img_show=PhotoImage(file="src.png") #cwgt.img=img_show #cwgt.create_image(200, 200, image=img_show) #retval, after_Binary = cv2.threshold(img, self.varLow.get(), self.varHigh.get(), cv2.THRESH_BINARY) #after_Blurr =cv2.blur(img,(5,5)) #after_MedianBlur=cv2.medianBlur(after_Blurr,5) #cv2.imwrite("out.png",res) #after_Binary=PhotoImage(file="out.png") #cwgt.img=res #cv2.imshow("show",res) #cwgt.create_image(0, 0, image=after_Binary) #cwgt.create_image(0, 0, image=mask) #after_Canny=cv2.Canny(after_MedianBlur,100,200) #findlabel=cv2.findContours(after_Blurr,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) #findlabel=cv2.findContours(after_Binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #im = cv2.imread('new.png') #imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) #ret,thresh = cv2.threshold(imgray,0,255,0) #image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #img=cv2.drawContours(image,contours,-1,(0,255,0),1) #cv2.imwrite("out.png",after_Binary) #cv2.imwrite("blur.png",after_Blurr) #cv2.imwrite("median blur.png",after_MedianBlur) #cv2.imwrite("Canny.png",after_Canny) #after_Binary=PhotoImage(file="out.png") #cwgt.img=after_Binary #cwgt.create_image(0, 0, image=after_Binary) #else: #cwgt.create_image(0, 0, image=img_origin) #print("xsfd") #print img_origin[100,100][0] #www=img_origin.width() #print www # def on_start(self): print("xsfd") self.showvideo() def off_video(self): #cwgt.frame.destroy() camera.stop_preview() ######## ###################################################################################### show window def show_Binary(self): ## input Thresh_Binary if (hasattr(self, 'ThBinary')): #(self.varHigh.get()> self.varLow.get()) self.ThBinary.deiconify() else: self.ThBinary = Tk() self.ThBinary.geometry("350x100+350+350") self.ThBinary.title("Binary") self.scale_L = Scale(self.ThBinary, from_=255, to=0, command=self.onScale_L) self.scale_L.pack(side=LEFT, padx=10) self.varLow = IntVar() self.label1 = Label(self.ThBinary, text="LOW") self.label1.pack(side=LEFT, padx=0) self.scale_H = Scale(self.ThBinary, from_=255, to=0, command=self.onScale_H) self.scale_H.pack(side=LEFT, padx=20) self.varHigh = IntVar() self.label2 = Label(self.ThBinary, text="HIGH") self.label2.pack(side=LEFT, padx=1) binary = Button(self.ThBinary, text="OK", width=5, background="green", command=self.getdata_Binary) binary.pack(side=LEFT) #binary = Button(self.ThBinary, text="Get_Binary",background="green",command=self.getdata_Binary) #binary.pack() ######## def show_Extract(self): ## input Thresh_Extract if hasattr(self, 'ThExtract'): self.ThExtract.deiconify() else: self.ThExtract = Tk() self.ThExtract.geometry("750x100+350+350") self.ThExtract.title("Extract_Color") ### self.scale_R_L = Scale(self.ThExtract, from_=255, to=0, command=self.onScale_R_L) self.scale_R_L.pack(side=LEFT, padx=10) self.varRed_L = IntVar() self.label_R_L = Label(self.ThExtract, text="Red_L") self.label_R_L.pack(side=LEFT, padx=0) self.scale_R_H = Scale(self.ThExtract, from_=255, to=0, command=self.onScale_R_H) self.scale_R_H.pack(side=LEFT, padx=10) self.varRed_H = IntVar() self.label_R_H = Label(self.ThExtract, text="Red_H") self.label_R_H.pack(side=LEFT, padx=0) ### self.scale_G_L = Scale(self.ThExtract, from_=255, to=0, command=self.onScale_G_L) self.scale_G_L.pack(side=LEFT, padx=10) self.varGreen_L = IntVar() self.label_G_L = Label(self.ThExtract, text="Green_L") self.label_G_L.pack(side=LEFT, padx=0) self.scale_G_H = Scale(self.ThExtract, from_=255, to=0, command=self.onScale_G_H) self.scale_G_H.pack(side=LEFT, padx=10) self.varGreen_H = IntVar() self.label_G_H = Label(self.ThExtract, text="Green_H") self.label_G_H.pack(side=LEFT, padx=0) ### self.scale_B_L = Scale(self.ThExtract, from_=255, to=0, command=self.onScale_B_L) self.scale_B_L.pack(side=LEFT, padx=10) self.varBlue_L = IntVar() self.label_B_L = Label(self.ThExtract, text="Blue_L") self.label_B_L.pack(side=LEFT, padx=0) self.scale_B_H = Scale(self.ThExtract, from_=255, to=0, command=self.onScale_B_H) self.scale_B_H.pack(side=LEFT, padx=10) self.varBlue_H = IntVar() self.label_G_H = Label(self.ThExtract, text="Blue_H") self.label_G_H.pack(side=LEFT, padx=0) ### Extract = Button(self.ThExtract, text="OK", width=5, background="green", command=self.getdata_Extract) Extract.pack(side=LEFT) ########## def show_Partical(self): print("") #self.ThBinary=Tk() #self.ThBinary.geometry("200x70+350+350") #self.ThBinary.title("Binary") #self.scale_L = Scale(self.ThBinary, from_=0, to=255, command=self.onScale_L) #self.scale_L.pack(side=LEFT, padx=10) #self.varLow = IntVar() #self.label1 = Label(self.ThBinary,text="LOW") #self.label1.pack(side=LEFT,padx=0) #self.scale_H = Scale(self.ThBinary, from_=0, to=255, command=self.onScale_H) #self.scale_H.pack(side=LEFT, padx=20) #self.varHigh = IntVar() #self.label2 = Label(self.ThBinary, text="HIGH") #self.label2.pack(side=LEFT,padx=1) ######### def confirm_SaveData(self): ##input password self.master = Tk() self.master.title("pass") self.master.geometry("200x70+350+350") self.content = StringVar() self.entry = Entry(self.master, text="000", textvariable=self.content) self.entry.pack() b = Button(self.master, text="get", width=10, command=self.SaveData) b.pack() text123 = self.content.get() self.content.set(text123) print(self.content.get()) ############ def reset_Area(self): self.infor_Area1.delete('1.0', END) self.infor_Area2.delete('1.0', END) self.infor_Area3.delete('1.0', END) self.infor_Area4.delete('1.0', END) def set_Area(self): self.text1 = self.infor_Area1.get('1.0', END) self.x0_1 = int(self.text1[0] + self.text1[1] + self.text1[2]) self.y0_1 = int(self.text1[4] + self.text1[5] + self.text1[6]) self.x1_1 = int(self.text1[8] + self.text1[9] + self.text1[10]) self.y1_1 = int(self.text1[12] + self.text1[13] + self.text1[14]) ######### def show_Area(self): #text1=self.infor_Area1.get('1.0',END) #x0_1=int(text1[0]+text1[1]) #y0_1=int(text1[3]+text1[4]) #x1_1=int(text1[6]+text1[7]) #y1_1=int(text1[9]+text1[10]) #text2=self.infor_Area2.get('1.0',END) #x0_2=int(text2[0]+text2[1]) #y0_2=int(text2[3]+text2[4]) #x1_2=int(text2[6]+text2[7]) #y1_2=int(text2[9]+text2[10]) #text3=self.infor_Area3.get('1.0',END) #x0_3=int(text3[0]+text3[1]) #y0_3=int(text3[3]+text3[4]) #x1_3=int(text3[6]+text3[7]) #y1_3=int(text3[9]+text3[10]) #text4=self.infor_Area4.get('1.0',END) #x0_4=int(text4[0]+text4[1]) #y0_4=int(text4[3]+text4[4]) #x1_4=int(text4[6]+text4[7]) #y1_4=int(text4[9]+text4[10]) img = cv2.imread("src.png", cv2.IMREAD_COLOR) #print self.x0_1 cv2.rectangle(img, (self.x0_1, self.y0_1), (self.x1_1, self.y1_1), (255, 0, 0), 2) #cv2.rectangle(img,(x0_2,y0_2),(x1_2,y1_2),(0,255,0),2) #cv2.rectangle(img,(x0_3,y0_3),(x1_3,y1_3),(0,0,255),2) #cv2.rectangle(img,(x0_4,y0_4),(x1_4,y1_4),(255,255,0),2) img_show_Area = img #img_show_Area=cv2.rectangle(img,(x0_1,y0_1),(x1_1,y1_1),(255,0,0),2) cv2.imwrite("show_Area.png", img_show_Area) img_show = PhotoImage(file="show_Area.png") cwgt2.img = img_show cwgt2.create_image(200, 200, image=img_show) #cv2.rectangle(img,(50,250),(100,500),(255,0,0),15) def AdjustBinary(self): if self.var1.get() == True: self.ThBinary.withdraw() self.ThBinary.deiconify() def AdjustExtract(self): if self.var2.get() == True: self.ThExtract.withdraw() self.ThExtract.deiconify() ############################################################################################ get data def SaveData(self): ## get password button print(self.entry.get()) self.set_Area() if self.entry.get() == "1111": self.master.destroy() tkMessageBox.showinfo(title="Save", message="SaveData success !!") print "Save" self.inforData_binary = "Binary : (" + self.text_binary + ")" self.inforData_Extract = "Extract : " + self.text_Extract self.inforData_Area1 = "Area1 : " + self.text1 if self.var1.get() == 1: data1 = "1" else: data1 = "0" ## if self.var2.get() == 1: data2 = "1" else: data2 = "0" ## if self.var3.get() == 1: data3 = "1" else: data3 = "0" ## if self.var4.get() == 1: data4 = "1" else: data4 = "0" ## if self.var5.get() == 1: data5 = "1" else: data5 = "0" ## self.SumData = (data1 + data2 + data3 + data4 + data5) print self.SumData self.inforData = self.SumData + "\n" + self.inforData_binary + "\n" + self.inforData_Extract + "\n" + self.inforData_Area1 print self.inforData #if self.var1.get()==1 : f = open('a.txt', 'w+') f.write(self.inforData) else: tkMessageBox.showinfo(title="fail", message="again") #### def getdata_Binary(self): value_low = str(self.varLow.get()) value_high = str(self.varHigh.get()) if self.varLow.get() > 99: min_binary = str(value_low) else: if self.varLow.get() > 9: min_binary = str("0" + value_low) else: min_binary = str("00" + value_low) if self.varHigh.get() > 99: max_binary = str(value_high) else: if self.varHigh.get() > 9: max_binary = str("0" + value_high) else: max_binary = str("00" + value_high) self.text_binary = str(min_binary + "," + max_binary) #if hasattr(self,'infor'): # self.infor.destroy() #if hasattr(self,'infor_Alg1'): # self.infor_Alg1.destroy() if self.varHigh.get() > self.varLow.get(): self.infor_Alg1.delete('1.0', END) self.infor_Alg1.insert(END, self.text_binary) #self.ThBinary.destroy() self.ThBinary.withdraw() else: tkMessageBox.showinfo(title="fail", message="again") #### def getdata_Extract(self): value_R_L = str(self.varRed_L.get()) value_R_H = str(self.varRed_H.get()) value_G_L = str(self.varGreen_L.get()) value_G_H = str(self.varGreen_H.get()) value_B_L = str(self.varBlue_L.get()) value_B_H = str(self.varBlue_H.get()) ## if self.varRed_L.get() > 99: min_R = str(value_R_L) else: if self.varRed_L.get() > 9: min_R = str("0" + value_R_L) else: min_R = str("00" + value_R_L) ## if self.varRed_H.get() > 99: max_R = str(value_R_H) else: if self.varRed_H.get() > 9: max_R = str("0" + value_R_H) else: max_R = str("00" + value_R_H) ### if self.varGreen_L.get() > 99: min_G = str(value_G_L) else: if self.varGreen_L.get() > 9: min_G = str("0" + value_G_L) else: min_G = str("00" + value_G_L) ## if self.varGreen_H.get() > 99: max_G = str(value_G_H) else: if self.varGreen_H.get() > 9: max_G = str("0" + value_G_H) else: max_G = str("00" + value_G_H) ### if self.varBlue_L.get() > 99: min_B = str(value_B_L) else: if self.varBlue_L.get() > 9: min_B = str("0" + value_B_L) else: min_B = str("00" + value_B_L) ## if self.varBlue_H.get() > 99: max_B = str(value_B_H) else: if self.varBlue_H.get() > 9: max_B = str("0" + value_B_H) else: max_B = str("00" + value_B_H) ### self.text_Extract = str("R(" + min_R + "," + max_R + ")" + "G(" + min_G + "," + max_G + ")" + "B(" + min_B + "," + max_B + ")") #if hasattr(self,'infor'): # self.infor.destroy() if ((self.varRed_H.get() > self.varRed_L.get()) and (self.varGreen_H.get() > self.varGreen_L.get()) and (self.varBlue_H.get() > self.varBlue_L.get())): self.infor_Alg2.delete('1.0', END) self.infor_Alg2.insert(END, self.text_Extract) self.ThExtract.withdraw() else: tkMessageBox.showinfo(title="fail", message="again") def confirm_LoadData(self): self.master = Tk() self.master.title("pass") self.master.geometry("200x70+350+350") self.content = StringVar() self.entry = Entry(self.master, text="000", textvariable=self.content) self.entry.pack() b = Button(self.master, text="get", width=10, command=self.getdata_Load) b.pack() text123 = self.content.get() self.content.set(text123) def getdata_Load(self): if self.entry.get() == "1111": self.master.destroy() tkMessageBox.showinfo(title="Load", message="LoadData success !!") self.LoadData() else: tkMessageBox.showinfo(title="fail", message="again") def LoadData(self): print "Load" f = open('a.txt', 'r') self.SumData = f.readline() load_binary = f.readline() load_extract = f.readline() load_area1 = f.readline() #self.ThBinary.deiconify() text_binary = (load_binary[10] + load_binary[11] + load_binary[12] + load_binary[13] + load_binary[14] + load_binary[15] + load_binary[16]) text_extract = ( load_extract[10] + load_extract[11] + load_extract[12] + load_extract[13] + load_extract[14] + load_extract[15] + load_extract[16] + load_extract[17] + load_extract[18] + load_extract[19] + load_extract[20] + load_extract[21] + load_extract[22] + load_extract[23] + load_extract[24] + load_extract[25] + load_extract[26] + load_extract[27] + load_extract[28] + load_extract[29] + load_extract[30] + load_extract[31] + load_extract[32] + load_extract[33] + load_extract[34] + load_extract[35] + load_extract[36] + load_extract[37] + load_extract[38] + load_extract[39]) text_area1 = (load_area1[8] + load_area1[9] + load_area1[10] + load_area1[11] + load_area1[12] + load_area1[13] + load_area1[14] + load_area1[15] + load_area1[16] + load_area1[17] + load_area1[18] + load_area1[19] + load_area1[20] + load_area1[21] + load_area1[22]) value_low_binary = int(load_binary[10] + load_binary[11] + load_binary[12]) value_high_binary = int(load_binary[14] + load_binary[15] + load_binary[16]) #### value_low_red = int(load_extract[12] + load_extract[13] + load_extract[14]) value_high_red = int(load_extract[16] + load_extract[17] + load_extract[18]) value_low_green = int(load_extract[22] + load_extract[23] + load_extract[24]) value_high_green = int(load_extract[26] + load_extract[27] + load_extract[28]) value_low_blue = int(load_extract[32] + load_extract[33] + load_extract[34]) value_high_blue = int(load_extract[36] + load_extract[37] + load_extract[38]) #### value_area1_x0 = int(load_area1[8] + load_area1[9] + load_area1[10]) value_area1_y0 = int(load_area1[12] + load_area1[13] + load_area1[14]) value_area1_x1 = int(load_area1[16] + load_area1[17] + load_area1[18]) value_area1_y1 = int(load_area1[20] + load_area1[21] + load_area1[22]) ####### self.x0_1 = value_area1_x0 self.y0_1 = value_area1_y0 self.x1_1 = value_area1_x1 self.y1_1 = value_area1_y1 ####### self.varHigh = IntVar() self.varLow = IntVar() self.varRed_L = IntVar() self.varRed_H = IntVar() self.varGreen_L = IntVar() self.varGreen_H = IntVar() self.varBlue_L = IntVar() self.varBlue_H = IntVar() self.varLow.set(value_low_binary) self.varHigh.set(value_high_binary) self.varRed_L.set(value_low_red) self.varRed_H.set(value_high_red) self.varGreen_L.set(value_low_green) self.varGreen_H.set(value_high_green) self.varBlue_L.set(value_low_blue) self.varBlue_H.set(value_high_blue) self.text_binary = text_binary self.text_Extract = text_extract self.text_area1 = text_area1 self.infor_Alg1.delete('1.0', END) self.infor_Alg1.insert(END, self.text_binary) self.infor_Alg2.delete('1.0', END) self.infor_Alg2.insert(END, self.text_Extract) self.infor_Area1.delete('1.0', END) self.infor_Area1.insert(END, self.text_area1) if self.SumData[0] == "1": self.var1.set(1) else: self.var1.set(0) if self.SumData[1] == "1": self.var2.set(1) else: self.var2.set(0) if self.SumData[2] == "1": self.var3.set(1) else: self.var3.set(0) if self.SumData[3] == "1": self.var4.set(1) else: self.var4.set(0) if self.SumData[4] == "1": self.var5.set(1) else: self.var5.set(0) self.set_Area() #self.inforData_binary="Binary : (" + self.text_binary + ")" #self.inforData_Extract="Extract : " + self.text_Extract #self.inforData=self.inforData_binary + "\n" + self.inforData_Extract #print self.inforData def Area(self): print "asasas"
def gui(): from Tkinter import Tk, Label, Entry,Button, Scale, Checkbutton,W,HORIZONTAL, Frame, StringVar, IntVar, DoubleVar, Radiobutton, BooleanVar, E global root root = Tk() root.wm_title("Compute R_complete") line = 0 global insFile, hklFile, nHKL, nParams, nHKLLabel, fracFree, status, nParamsLabel, nCPU, rCompleteLabel, cycles, lsType, cleanup,nFree, nRunsLabel, mergeCheck, compileMap insFile = StringVar() hklFile = StringVar() nHKL = IntVar() nParams = IntVar() nFree = IntVar() fracFree = DoubleVar() fracFree.set(5.0) nCPU = IntVar() nCPU.set(maxCPU) cycles = IntVar() cycles.set(10) lsType = IntVar() lsType.set(1) cleanup = BooleanVar() cleanup.set(True) mergeCheck = BooleanVar() mergeCheck.set(True) compileMap = BooleanVar() compileMap.set(True) Label(root, text='Instruction File:').grid(row=line, column=0, sticky=E) Entry(root, textvariable=insFile).grid(row=line, column=1) Button(root, text='Browse', command=browseINS).grid(row=line, column=2) line += 1 Label(root, text='Reflection File:').grid(row=line, column=0, sticky=E) Entry(root, textvariable=hklFile).grid(row=line, column=1) Button(root, text='Browse', command=browseHKL).grid(row=line, column=2) line += 1 Checkbutton(root, var=mergeCheck, text='Merge Reflections').grid(row=line, column=1, sticky=W) line += 1 Button(root, text='Load', command=load).grid(row=line, columnspan=3) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='# of reflections:').grid(row=line, sticky=E) nHKLLabel = Label(root, text='???') nHKLLabel.grid(row=line, column=1, sticky=W) line += 1 Label(root, text='# of atoms:').grid(row=line, sticky=E) nParamsLabel = Label(root, text='???') nParamsLabel.grid(row=line, column=1, sticky=W) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='Select Parameters').grid(row=line, column=1) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='# of free reflections:').grid(row=line, sticky=E) nFreeEntry = Entry(root, width=5, textvariable=nFree) nFreeEntry.grid(row=line, column=1, sticky=W) nFreeEntry.bind('<Return>', setScale) nRunsLabel = Label(root, text='# runs') nRunsLabel.grid(row=line, column=2) line += 1 Label(root, text='% of free reflections:').grid(row=line, column=0, sticky=E) w = Scale(root, from_=0.1, to=10.0, resolution=0.1, orient=HORIZONTAL, length=200, var=fracFree, command=percentScale) w.grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Label(root, text='stable <-------------------------------> fast').grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Frame(root, height=10).grid(row=line) line += 1 Label(root, text='Refinement cycles:').grid(row=line, column=0, sticky=E) ls = Scale(root, from_=0, to=50, resolution=1, orient=HORIZONTAL, length=200, var=cycles) ls.grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Label(root, text='fast <--------------------> less model bias').grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Frame(root, height=10).grid(row=line) line += 1 Label(root, text='# of CPUs:').grid(row=line, column=0, sticky=E) ww = Scale(root, from_=1, to=maxCPU, orient=HORIZONTAL, length=200, var=nCPU) ww.grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Label(root, text='Refinement Type:').grid(row=line, column=0, sticky=E) Radiobutton(root, text='CGLS', var=lsType, value=1).grid(row=line, column=1, sticky=W) Radiobutton(root, text='L.S.', var=lsType, value=2).grid(row=line, column=2, sticky=W) line += 1 Frame(root, height=10).grid(row=line) line += 1 Label(root, text='Compile map:').grid(row=line, column=0, sticky=E) Checkbutton(root, var=compileMap).grid(row=line, column=1, sticky=W) line += 1 Label(root, text='Cleanup:').grid(row=line, column=0, sticky=E) Checkbutton(root, var=cleanup).grid(row=line, column=1, sticky=W) line += 1 Button(root, text='RUN', command=run, width=25).grid(row=line, columnspan=3) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='R_complete:').grid(row=line, column=0, sticky=E) rCompleteLabel = Label(root, text='???') rCompleteLabel.grid(row=line, column=1, sticky=W) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='Status:').grid(row=line, column=0, sticky=E) status = Label(root, text='Idle... Please load files.') status.grid(row=line, column=1, columnspan=2, sticky=W) global IDLE IDLE = True root.mainloop()
class channel_plot: ''' ''' def __init__(self, interface, toplevel=False, start_t=False, stop_t=False): ''' ''' self.abort = False if not start_t: start_t = datetime.utcnow() - timedelta(hours=2) if not stop_t: stop_t = datetime.utcnow() self.update_pending = False self.pype = interface self.plot_dicts = {} if isinstance(start_t, datetime): self.start_t = StringVar(value=start_t.strftime(time_format)) elif isinstance(start_t, str): self.start_t = StringVar(value=start_t) else: raise TypeError('start_t must be string or datetime') if isinstance(stop_t, datetime): self.stop_t = StringVar(value=stop_t.strftime(time_format)) elif isinstance(stop_t, str): self.stop_t = StringVar(value=stop_t) else: raise TypeError('stop_t must be string or datetime') self.time_interval = [self.start_t.get(), self.stop_t.get()] self.ymin = DoubleVar() self.ymax = DoubleVar() if toplevel: self.toplevel = toplevel else: self.toplevel = Tk.Tk() self.status_var = StringVar(value='initializing') self._SetupCanvas() self._BuildGui() if not toplevel: Tk.mainloop() def _BuildGui(self): ''' ''' self.removei = IntVar(value=0) self.relative_start_time = BooleanVar(value=False) self.relative_stop_time = BooleanVar(value=False) self.continuous_updates = BooleanVar(value=False) self.ManualLimits = BooleanVar(value=False) self.LogYScale = BooleanVar(value=False) self.ShowGrid = BooleanVar(value=False) self.ConnectedPts = BooleanVar(value=True) Button(self.toplevel, text="Add Line", command=self._AddSubplot ).grid(row=0, column=1) self._AddSubplot() Button(self.toplevel, text="Gas Line Temps", command=self._PlotGasLines ).grid(row=0, column=2) Button(self.toplevel, text="Amps+Cell Temps", command=self._PlotCell ).grid(row=0, column=3) Label(self.toplevel, text='Start Time').grid(row=4, column=1) start_entry = Entry(self.toplevel, textvariable=self.start_t) start_entry.bind('<Return>', self.Update) start_entry.bind('<KP_Enter>', self.Update, '+') start_entry.grid(row=4, column=2, columnspan=2) Checkbutton(self.toplevel, text='Hours ago', variable=self.relative_start_time).grid(row=4, column=4, sticky='W') Label(self.toplevel, text='Stop Time').grid(row=5, column=1) stop_entry = Entry(self.toplevel, textvariable=self.stop_t) stop_entry.bind('<Return>', self.Update) stop_entry.bind('<KP_Enter>', self.Update, '+') stop_entry.grid(row=5, column=2, columnspan=2) Checkbutton(self.toplevel, text='Now', variable=self.relative_stop_time).grid(row=5, column=4, sticky='W') Label(self.toplevel, text='Y limits (min-max)').grid(row=7, column=1) ymin = Entry(self.toplevel, textvariable=self.ymin) ymin.grid(row=7, column=2) ymin.bind('<Return>', self.Update) ymin.bind('<KP_Enter>', self.Update, '+') ymax = Entry(self.toplevel, textvariable=self.ymax) ymax.grid(row=7, column=3) ymax.bind('<Return>', self.Update) ymax.bind('<KP_Enter>', self.Update, '+') Checkbutton(self.toplevel, text='Manual Y-limits', variable=self.ManualLimits ).grid(row=8, column=1) Checkbutton(self.toplevel, text='Log Y-scale', variable=self.LogYScale ).grid(row=8, column=2) Checkbutton(self.toplevel, text='Show Grid', variable=self.ShowGrid ).grid(row=9, column=1) Checkbutton(self.toplevel, text='Connected Points', variable=self.ConnectedPts ).grid(row=9, column=2) Button(self.toplevel, text="Update All", command=self.Update ).grid(row=10, column=1) Button(self.toplevel, text="Save Plot", command=self.SaveFigure ).grid(row=10, column=2) Button(self.toplevel, text="Save Json", command=self.SaveJson ).grid(row=10, column=3) Checkbutton(self.toplevel, text='Continuous (Button above to start)', variable=self.continuous_updates ).grid(row=11, column=1, columnspan=2) self.status_var.set('done') Label(self.toplevel, textvariable=self.status_var).grid(row=20, column=1, columnspan=2) def _SetupCanvas(self): ''' ''' self.figure = Figure() self.figure.subplots_adjust(left=0.15, bottom=0.2) self.subfigure = self.figure.add_subplot(1,1,1) self.notebook = Notebook(self.toplevel) self.notebook.grid(row=1, column=1, rowspan=3, columnspan=3, sticky='nsew') self.canvas = FigureCanvasTkAgg(self.figure, master=self.toplevel) self.canvas.show() self.canvas.get_tk_widget().grid(row=0, column=0, rowspan=10) def _AddSubplot(self): ''' ''' plotnum = len(self.notebook.tabs()) self.plot_dicts[plotnum] = {} frame = Frame(self.notebook) frame.pack(side='top', fill='both', expand='y') self.plot_dicts[plotnum]['xname'] = StringVar(value='None') self.plot_dicts['xunit'] = False self.plot_dicts[plotnum]['yname'] = StringVar(value='None') self.plot_dicts['yunit'] = False Label(frame, text='X Channel').grid(row=0, column=0) Label(frame, text='Y Channel').grid(row=1, column=0) OptionMenu(frame, self.plot_dicts[plotnum]['xname'], "None", "time", "dpph_field", *self.pype.EligibleLoggers() ).grid(row=0, column=1, sticky='ew') OptionMenu(frame, self.plot_dicts[plotnum]['yname'], "None", "dpph_field", *self.pype.EligibleLoggers() ).grid(row=1, column=1, sticky='ew') self.notebook.add(frame, text='line:'+str(plotnum)) def _SetStartStop(self, event=None): ''' ''' try: if self.relative_stop_time.get(): stop_time = datetime.utcnow() else: stop_time = datetime.strptime(self.stop_t.get(), time_format) if self.relative_start_time.get(): hours = float(self.start_t.get()) start = datetime.utcnow() - timedelta(hours=hours) else: start = datetime.strptime(self.start_t.get(), time_format) assert (start < stop_time) self.time_interval[0] = start.strftime(time_format) self.time_interval[1] = stop_time.strftime(time_format) except ValueError: showwarning('Warning', 'invalid time format, must match yyyy-mm-ddThh:mm:ssZ') raise TimeFormatError("invalid start or stop time format") except AssertionError: showwarning('Warning', 'time order error, stop time must be after start time') raise TimeOrderError("stop time must be after start time") def Update(self, event=None, tab='All', unpend=False): ''' Call whatever sequence is needed to update local data and redraw the plot ''' if self.abort: self.abort = False return if unpend: self.update_pending = False self.status_var.set('updating!') if tab == 'All': tab = range(len(self.notebook.tabs())) elif isinstance(tab, int): tab = [tab] else: raise ValueError('tab should be "All" or an int') try: self._SetStartStop(event=None) except: print('SetStartStop problems') self.abort = True self.subfigure.clear() for tabi in tab: if tabi > len(self.subfigure.get_lines()): print('wtf') elif tabi == len(self.subfigure.get_lines()): self._UpdateData(tab=tabi) self._MakePlot(tab=tabi) else: self._UpdateExisting(tab=tabi) self.figure.legends = [] self.figure.legend(*self.subfigure.get_legend_handles_labels()) self.figure.legends[0].draggable(True) self.canvas.draw() self.status_var.set('updated at: ' + datetime.utcnow().strftime(time_format)) if (self.continuous_updates.get() and self.relative_stop_time.get() and not self.update_pending): self.update_pending = True self.toplevel.after(10000, lambda: self.Update(unpend=True)) def _UpdateData(self, tab=0): ''' ''' try: yname = self.plot_dicts[tab]['yname'].get() ychdat = self.pype.GetTimeSeries(yname, self.time_interval[0], self.time_interval[1]) if self.plot_dicts[tab]['xname'].get() == 'time': xchdat = (ychdat[0], ychdat[0], 'time' * len(ychdat[0])) else: xname = self.plot_dicts[tab]['xname'].get() xchdat = self.pype.GetTimeSeries(xname, self.time_interval[0], self.time_interval[1]) if tab > 0 and ychdat[0]: assert xchdat[2][0] == self.plot_dicts['xunit'], 'x units' assert ychdat[2][0] == self.plot_dicts['yunit'], 'y units' self.xdata = [] self.ydata = [] if ychdat[0]: for tx, x in zip(xchdat[0], xchdat[1]): xtmp = False ytmp = False dt = timedelta(seconds=60) for ty, y in zip(ychdat[0], ychdat[1]): if abs(ty - tx) < dt: dt = abs(ty - tx) xtmp = x ytmp = y if xtmp and ytmp: self.xdata.append(xtmp) self.ydata.append(ytmp) [self.xdata, self.ydata] = zip(*sorted(zip(self.xdata, self.ydata))) self.plot_dicts['xunit'] = xchdat[2][0] self.plot_dicts['yunit'] = ychdat[2][0] except AssertionError as e: print('*'*60, '\n the', e[0], 'do not match the 0th line', '*'*60) def _UpdateExisting(self, tab=0): ''' ''' try: yname = self.plot_dicts[tab]['yname'].get() ychdat = self.pype.GetTimeSeries(yname, self.time_interval[0], self.time_interval[1]) if self.plot_dicts[tab]['xname'].get() == 'time': xchdat = (ychdat[0], ychdat[0], 'time' * len(ychdat[0])) else: xname = self.plot_dicts[tab]['xname'].get() xchdat = self.pype.GetTimeSeries(xname, self.time_interval[0], self.time_interval[1]) if tab > 0 and ychdat[0]: assert xchdat[2][0] == self.plot_dicts['xunit'], 'x units' assert ychdat[2][0] == self.plot_dicts['yunit'], 'y units' self.xdata = [] self.ydata = [] if ychdat[0]: for tx, x in zip(xchdat[0], xchdat[1]): xtmp = False ytmp = False dt = timedelta(seconds=60) for ty, y in zip(ychdat[0], ychdat[1]): if abs(ty - tx) < dt: dt = abs(ty - tx) xtmp = x ytmp = y if xtmp and ytmp: self.xdata.append(xtmp) self.ydata.append(ytmp) [self.xdata, self.ydata] = zip(*sorted(zip(self.xdata, self.ydata))) self.plot_dicts['xunit'] = xchdat[2][0] self.plot_dicts['yunit'] = ychdat[2][0] this_line = self.subfigure.get_lines()[tab] this_line.set_xdata(array(self.xdata)) this_line.set_ydata(array(self.ydata)) except AssertionError as e: print('*'*60, '\n the', e[0], 'do not match the 0th line', '*'*60) def _MakePlot(self, tab=0): ''' ''' if self.ConnectedPts.get(): plotformat='o-' else: plotformat='o' if self.plot_dicts[tab]['xname'].get() == 'time': self.subfigure.plot_date(self.xdata, self.ydata, plotformat, label=self.plot_dicts[tab]['yname'].get()) self.subfigure.set_xticklabels(self.subfigure.get_xticklabels(), rotation=-45) self.subfigure.xaxis.set_major_formatter(dates.DateFormatter( "%m/%d %H:%M")) self.subfigure.yaxis.set_major_formatter(ticker.ScalarFormatter( useOffset=False)) else: self.subfigure.plot(self.xdata, self.ydata, plotformat, label=self.plot_dicts[tab]['yname'].get()) self.subfigure.set_title(self.plot_dicts[tab]['yname'].get() + ' vs ' + self.plot_dicts[tab]['xname'].get() + '\n from ' + self.time_interval[0] + ' to ' + self.time_interval[1]) xname = self.plot_dicts[tab]['xname'].get().replace('_', ' ') xunit = '[' + str(self.plot_dicts['xunit']) + ']' self.subfigure.set_xlabel(xname + ' ' + xunit) yname = self.plot_dicts[tab]['yname'].get().replace('_', ' ') yunit = '[' + str(self.plot_dicts['yunit']) + ']' self.subfigure.set_ylabel(yname + ' ' + yunit) tickformat = ticker.ScalarFormatter(useOffset=False) if self.ManualLimits.get(): self.subfigure.set_ylim(bottom=self.ymin.get(), top=self.ymax.get()) if self.LogYScale.get(): self.subfigure.set_yscale('log') if self.ShowGrid.get(): self.subfigure.grid(b=True, which='major') self.subfigure.grid(b=True, which='minor') def _PlotGasLines(self): ''' ''' gas_lines = ['left_gas_line_lower_t', 'left_gas_line_upper_t', 'right_gas_line_lower_t', 'right_gas_line_upper_t'] self._PlotSet(gas_lines) def _PlotCell(self): ''' ''' sensors = ['kh2_temp', 'kh3_temp', 'waveguide_cell_body_temp', 'coldhead_temp'] self._PlotSet(sensors) def _PlotSet(self, channels): ''' Plots a set of channels on common axes ''' for plotn, channel in enumerate(channels): if (len(self.plot_dicts)-2) <= plotn: self._AddSubplot() self.plot_dicts[plotn]['xname'].set('time') self.plot_dicts[plotn]['yname'].set(channel) self.start_t.set('3') self.relative_start_time.set(True) self.relative_stop_time.set(True) self.continuous_updates.set(True) self.Update() def SaveFigure(self): ''' ''' file_extensions = [('vectorized', '.eps'), ('adobe', '.pdf'), ('image', '.png'), ('all', '.*')] outfile = asksaveasfilename(defaultextension='.pdf', filetypes=file_extensions) self.figure.savefig(outfile) def SaveJson(self): ''' ''' outfile = asksaveasfile(defaultextension='.json') outdict = {'xunit':self.plot_dicts['xunit'], 'yunit':self.plot_dicts['yunit'] } for tab in range(len(self.plot_dicts)-2): outdict[tab] = {} outdict[tab]['xname']=self.plot_dicts[tab]['xname'].get() outdict[tab]['yname']=self.plot_dicts[tab]['yname'].get() this_line = self.subfigure.get_lines()[tab] if outdict['xunit'] == 't': outdict[tab]['xdata'] = [str(t) for t in this_line.get_xdata()] else: outdict[tab]['xdata'] = list(this_line.get_xdata()) outdict[tab]['ydata'] = list(this_line.get_ydata()) dump(outdict, outfile, indent=4) outfile.close()
class Output(object): def __init__(self, main, bondForceParams, atoms_def): self.bondForceParams = bondForceParams self.dG_off_kJ = calc_dG( bondForceParams['T'], bondForceParams['r_aA'], bondForceParams['th_a'], bondForceParams['th_A'], bondForceParams['K_r_aA'], bondForceParams['K_th_a'], bondForceParams['K_th_A'], bondForceParams['K_phi_ba'], bondForceParams['K_phi_aA'], bondForceParams['K_phi_AB']) self.dG_on_kJ = -self.dG_off_kJ self.dG_off_kCal = kJ_to_kCal(self.dG_off_kJ) self.dG_on_kCal = kJ_to_kCal(self.dG_on_kJ) self.atoms_def = atoms_def self.main = main self.main.title('PyFepRestr') if platform == "darwin": self.button_font = self.label_font = self.radiobutton_font = Font( family='Arial', size=15) else: self.radiobutton_font = Font(font=Radiobutton()["font"]) self.label_font = Font(font=Label()["font"]) self.button_font = Font(font=Button()["font"]) self.r_var = BooleanVar() self.r_var.set(0) rj1 = Radiobutton(self.main, text='kJ', variable=self.r_var, value=0, command=self.refresh, font=self.radiobutton_font) rcal1 = Radiobutton(self.main, text="kCal", variable=self.r_var, value=1, command=self.refresh, font=self.radiobutton_font) rj1.grid(row=0, column=0, padx=5, pady=5) rcal1.grid(row=0, column=1, padx=5, pady=5) name0 = Label(self.main, text=u'\u0394G_off = ', font=self.label_font) name1 = Label(self.main, text=u'\u0394G_on = ', font=self.label_font) name0.grid(row=1, column=0, padx=5, pady=5) name1.grid(row=2, column=0, padx=5, pady=5) self.answer0 = Label(self.main, font=self.label_font) self.answer1 = Label(self.main, font=self.label_font) self.answer0.grid(row=1, column=1, padx=5, pady=5) self.answer1.grid(row=2, column=1, padx=5, pady=5) self.dimen0 = Label(self.main, font=self.label_font) self.dimen1 = Label(self.main, font=self.label_font) self.dimen0.grid(row=1, column=2, padx=5, pady=5) self.dimen1.grid(row=2, column=2, padx=5, pady=5) self.refresh() destroyProgr = Button(self.main, text='Exit', bg='red', command=self.main.destroy, font=self.button_font) destroyProgr.grid(row=0, column=3, padx=5, pady=5) helpProgr = Button(self.main, text=' ? ', bg='#ffb3fe', command=self.getHelp, font=self.button_font) helpProgr.grid(row=4, column=0, padx=5, pady=5) self.select_prog = StringVar() self.select_prog.set("Gromacs topology file") prog_list = ["Gromacs topology file", "NAMD Colvars"] menu = OptionMenu(self.main, self.select_prog, *prog_list) menu.grid(row=3, column=0, padx=5, pady=5) previewButton = Button(self.main, text='Preview', bg='gray', command=self.ViewRestr, font=self.button_font) previewButton.grid(row=3, column=2, padx=5, pady=5) saveFileButton = Button(self.main, text='Save', bg='gray', command=self.writeFile, font=self.button_font) saveFileButton.grid(row=3, column=3, padx=5, pady=5) def refresh(self): if self.r_var.get(): self.dimen0.configure(text='kCal/mol') self.dimen1.configure(text='kCal/mol') self.answer0.configure(text='{:>.3f}'.format(self.dG_off_kCal)) self.answer1.configure(text='{:>.3f}'.format(self.dG_on_kCal)) else: self.dimen0.configure(text='kJ/mol') self.dimen1.configure(text='kJ/mol') self.answer0.configure(text='{:>.3f}'.format(self.dG_off_kJ)) self.answer1.configure(text='{:>.3f}'.format(self.dG_on_kJ)) self.dimen0.update() self.dimen0.update() self.answer0.update() self.answer1.update() @staticmethod def getHelp(): with tempfile.NamedTemporaryFile('w', delete=False, suffix='.html') as f: url = "file://" + f.name f.write(help_2) webbrowser.open(url) def ViewRestr(self): if self.select_prog.get() == "Gromacs topology file": restraints = self.createGronacsRestr() SrollViewer(self.main, "topol.top", restraints) elif self.select_prog.get() == "NAMD Colvars": restraints = self.createNAMDRestraints() SrollViewer(self.main, "Restraints.in", restraints) def writeFile(self): if self.select_prog.get() == "Gromacs topology file": topolFile = askopenfilename(initialdir="./", title="Select file", filetypes=(("Topology files", "*.top"), ("all files", "*.*"))) restraints = self.createGronacsRestr() elif self.select_prog.get() == "NAMD Colvars": topolFile = asksaveasfilename(initialdir="./", title="Save as..", filetypes=(("in files", "*.in"), ("Tcl files", "*.tcl"), ("all files", "*.*")), initialfile="Restraints.in", defaultextension='.in') restraints = self.createNAMDRestraints() if topolFile is None: showerror("Error", "File is not selected!") return try: if self.select_prog.get() == "Gromacs topology file": with open(topolFile, 'at') as f: f.write("\n\n" + restraints) elif self.select_prog.get() == "NAMD Colvars": with open(topolFile, 'wt') as f: f.write(restraints) except IOError: showerror( "Error", "File {:s} is not accessible for writing!".format(topolFile)) def createGronacsRestr(self): restraints = ( "[ intermolecular_interactions ]\n" "[ bonds ]\n" "; ai aj type bA kA bB kB\n" " {12:5d} {13:5d} 6 {0:.3f} 0.0 {0:.3f} {6:.1f} ; {20:s} - {21:s}\n" " \n" "[ angles ]\n" "; ai aj ak type thA fcA thB fcB\n" " {14:5d} {12:5d} {13:5d} 1 {1:>6.2f} 0.0 {1:>6.2f} {7:.2f} ; {19:s} - {20:s} - {21:s}\n" " {12:5d} {13:5d} {15:5d} 1 {2:>6.2f} 0.0 {2:>6.2f} {8:.2f} ; {20:s} - {21:s} - {22:s}\n" "\n" "[ dihedrals ]\n" "; ai aj ak al type thA fcA thB fcB\n" " {16:5d} {14:5d} {12:5d} {13:5d} 2 {3:>7.2f} 0.0 {3:>7.2f} {9:.2f} ; {18:s} - {19:s} - {20:s} - {21:s}\n" " {14:5d} {12:5d} {13:5d} {15:5d} 2 {4:>7.2f} 0.0 {4:>7.2f} {10:>7.2f} ; {19:s} - {20:s} - {21:s} - {22:s}\n" " {12:5d} {13:5d} {15:5d} {17:5d} 2 {5:>7.2f} 0.0 {5:>7.2f} {11:>7.2f} ; {20:s} - {21:s} - {22:s} - {23:s}\n" "; T = {24:.1f} K\n" "; dG_off = {25:.3f} kJ/mol ({27:.3f} kCal/mol)\n" "; dG_on = {26:.3f} kJ/mol ({28:.3f} kCal/mol)\n").format( self.bondForceParams['r_aA'], # 0 self.bondForceParams['th_a'], # 1 self.bondForceParams['th_A'], # 2 self.bondForceParams['phi_ba'], # 3 self.bondForceParams['phi_aA'], # 4 self.bondForceParams['phi_AB'], # 5 self.bondForceParams['K_r_aA'], # 6 self.bondForceParams['K_th_a'], # 7 self.bondForceParams['K_th_A'], # 8 self.bondForceParams['K_phi_ba'], # 9 self.bondForceParams['K_phi_aA'], # 10 self.bondForceParams['K_phi_AB'], # 11 self.bondForceParams['index_a'], # 12 self.bondForceParams['index_A'], # 13 self.bondForceParams['index_b'], # 14 self.bondForceParams['index_B'], # 15 self.bondForceParams['index_c'], # 16 self.bondForceParams['index_C'], # 17 self.atoms_def['index_c'], # 18 self.atoms_def['index_b'], # 19 self.atoms_def['index_a'], # 20 self.atoms_def['index_A'], # 21 self.atoms_def['index_B'], # 22 self.atoms_def['index_C'], # 23 self.bondForceParams['T'], # 24 self.dG_off_kJ, # 25 self.dG_on_kJ, # 26 self.dG_off_kCal, # 27 self.dG_on_kCal # 28 ) return restraints def createNAMDRestraints(self): preambula_1 = ( "Colvarstrajfrequency 500\n" "Colvarsrestartfrequency 500\n" "\n" "\n" "#############################################################\n" "# ALL COLVARS RESTRAINED\n" "#############################################################\n" "# COLVARS DEFINITIONS\n" "#############################################################\n" "\n") colvarR_aA = ("# {:s} - {:s}\n" "colvar {{\n" " name R\n" " width 1.0\n" " lowerboundary 0.0\n" " upperboundary 40.0\n" " distance {{\n" " forceNoPBC yes\n" " group1 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group2 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " }}\n" "}}\n").format(self.atoms_def['index_a'], self.atoms_def['index_A'], self.bondForceParams['index_a'], self.bondForceParams['index_A']) colvarTh_a = ("# {:s} - {:s} - {:s}\n" "colvar {{\n" " name th_a\n" " width 1.0\n" " lowerboundary 0.0\n" " upperboundary 180.0\n" " angle {{\n" " group1 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group2 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group3 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " }}\n" "}}\n").format(self.atoms_def['index_b'], self.atoms_def['index_a'], self.atoms_def['index_A'], self.bondForceParams['index_b'], self.bondForceParams['index_a'], self.bondForceParams['index_A']) colvarTh_A = ("# {:s} - {:s} - {:s}\n" "colvar {{\n" " name th_A\n" " width 1.0\n" " lowerboundary 0.0\n" " upperboundary 180.0\n" " angle {{\n" " group1 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group2 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group3 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " }}\n" "}}\n").format(self.atoms_def['index_a'], self.atoms_def['index_A'], self.atoms_def['index_B'], self.bondForceParams['index_a'], self.bondForceParams['index_A'], self.bondForceParams['index_B']) colvarPhi_ba = ("# {:s} - {:s} - {:s} - {:s}\n" "colvar {{\n" " name phi_ba\n" " width 1.0\n" " lowerboundary -180.0\n" " upperboundary 180.0\n" " dihedral {{\n" " group1 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group2 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group3 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group4 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " }}\n" "}}\n").format(self.atoms_def['index_c'], self.atoms_def['index_b'], self.atoms_def['index_a'], self.atoms_def['index_A'], self.bondForceParams['index_c'], self.bondForceParams['index_b'], self.bondForceParams['index_a'], self.bondForceParams['index_A']) colvarPhi_aA = ("# {:s} - {:s} - {:s} - {:s}\n" "colvar {{\n" " name phi_aA\n" " width 1.0\n" " lowerboundary -180.0\n" " upperboundary 180.0\n" " dihedral {{\n" " group1 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group2 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group3 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group4 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " }}\n" "}}\n").format(self.atoms_def['index_b'], self.atoms_def['index_a'], self.atoms_def['index_A'], self.atoms_def['index_B'], self.bondForceParams['index_b'], self.bondForceParams['index_a'], self.bondForceParams['index_A'], self.bondForceParams['index_B']) colvarPhi_AB = ("# {:s} - {:s} - {:s} - {:s}\n" "colvar {{\n" " name phi_AB\n" " width 1.0\n" " lowerboundary -180.0\n" " upperboundary 180.0\n" " dihedral {{\n" " group1 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group2 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group3 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " group4 {{\n" " atomnumbers {{ {:d} }}\n" " }}\n" " }}\n" "}}\n").format(self.atoms_def['index_a'], self.atoms_def['index_A'], self.atoms_def['index_B'], self.atoms_def['index_C'], self.bondForceParams['index_a'], self.bondForceParams['index_A'], self.bondForceParams['index_B'], self.bondForceParams['index_C']) preambula_2 = ( "#############################################################\n" "# RESTRAINTS AND PMF\n" "#############################################################\n") alcR = ("harmonic {{\n" " colvars R\n" " centers {:.1f}\n" " forceConstant {:.1f}\n" "}}\n").format( 10 * self.bondForceParams['r_aA'], kJ_to_kCal(self.bondForceParams['K_r_aA'] / 100.0)) alcTh_a = ("harmonic {{\n" " colvars th_a\n" " centers {:.1f}\n" " forceConstant {:.1f}\n" "}}\n").format( self.bondForceParams['th_a'], kJ_to_kCal(self.bondForceParams['K_th_a'] * math.pi / 180.0)) alcTh_A = ("harmonic {{\n" " colvars th_A\n" " centers {:.1f}\n" " forceConstant {:.1f}\n" "}}\n").format( self.bondForceParams['th_A'], kJ_to_kCal(self.bondForceParams['K_th_A'] * math.pi / 180.0)) alcPhi_ba = ("harmonic {{\n" " colvars phi_ba\n" " centers {:.1f}\n" " forceConstant {:.1f}\n" "}}\n").format( self.bondForceParams['phi_ba'], kJ_to_kCal(self.bondForceParams['K_phi_ba'] * math.pi / 180.0)) alcPhi_aA = ("harmonic {{\n" " colvars phi_aA\n" " centers {:.1f}\n" " forceConstant {:.1f}\n" "}}\n").format( self.bondForceParams['phi_aA'], kJ_to_kCal(self.bondForceParams['K_phi_aA'] * math.pi / 180.0)) alcPhi_AB = ("harmonic {{\n" " colvars phi_AB\n" " centers {:.1f}\n" " forceConstant {:.1f}\n" "}}\n").format( self.bondForceParams['phi_AB'], kJ_to_kCal(self.bondForceParams['K_phi_AB'] * math.pi / 180.0)) return (preambula_1 + colvarR_aA + colvarTh_a + colvarTh_A + colvarPhi_ba + colvarPhi_aA + colvarPhi_AB + preambula_2 + alcR + alcTh_a + alcTh_A + alcPhi_ba + alcPhi_aA + alcPhi_AB)
class FindReplacePanel(PluginPanel): name='Text Find & Replace' title = _("Text Find & Replace") def init(self, master): PluginPanel.init(self, master) top = self.panel top = TFrame(top, borderwidth=2, style='FlatFrame') top.pack(side = TOP, expand = 1, fill = X) button_frame = TFrame(top, borderwidth=2, style='FlatFrame') button_frame.pack(side = BOTTOM, fill = BOTH, expand = 1) button=TButton(button_frame,text=_('Apply'), command=self.replace) button.pack(side = TOP) #---------------------------------------------------------- main_frame = TFrame(top, style='FlatFrame', borderwidth=3) main_frame.pack(side = TOP, fill=X) self.find_var = StringVar(top); self.find_var.set('') findField = TEntryExt(main_frame, textvariable=self.find_var) findField.pack(side = RIGHT) label = TLabel(main_frame, style='FlatLabel', text = _("Find:")+" ") label.pack(side = RIGHT, anchor = E) #--------------------------------------------------------- main_frame = TFrame(top, style='FlatFrame', borderwidth=3) main_frame.pack(side = TOP, fill=X) self.replace_var = StringVar(top); self.replace_var.set('') replaceField = TEntryExt(main_frame, textvariable=self.replace_var) replaceField.pack(side = RIGHT) label = TLabel(main_frame, style='FlatLabel', text = _("Replace to:")+" ") label.pack(side = RIGHT, anchor = E) main_frame = TFrame(top, style='FlatFrame', borderwidth=3) main_frame.pack(side = TOP) #--------------------------------------------------------- label=TLabel(top, text=" "+_("Parameters")+" ", style="FlatLabel") label.pack() parametersFrameLabel=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) parametersFrameLabel.pack(side = TOP, fill=X, pady=4, padx=4) parametersFrame = TFrame(parametersFrameLabel, style='FlatFrame') self.var_case_sensitive = BooleanVar(top) self.var_case_sensitive.set(False) self.case_sensitive_check = TCheckbutton(parametersFrame, text = _("Case sensitive"), variable = self.var_case_sensitive) self.case_sensitive_check.pack(side = TOP, anchor=W, padx=5) self.var_whole_word = BooleanVar(top) self.var_whole_word.set(False) self.whole_word_check = TCheckbutton(parametersFrame, text = _("Whole word"), variable = self.var_whole_word) self.whole_word_check.pack(side = TOP, anchor=W, padx=5) self.var_regexp = BooleanVar(top) self.var_regexp.set(False) self.regexpCheck = TCheckbutton(parametersFrame, text = _("RegExp search"), variable = self.var_regexp, command=self.disable_enable_action) self.regexpCheck.pack(side = TOP, anchor=W, padx=5) parametersFrame.pack(side=TOP, fill=X, pady=2) ################################################################ def replace_text(self,objects, toReplace, replaceTo): for object in objects: if object.is_Text: if self.var_regexp.get(): if self.var_case_sensitive.get(): p=re.compile(toReplace) else: p=re.compile(toReplace, re.I) text=p.sub(replaceTo, object.text) app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod(object.__class__,_('Text Replace'),'SetText',text) continue if self.var_whole_word.get(): if not self.var_case_sensitive.get(): if object.text.lower()==toReplace.lower(): text=replaceTo app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod(object.__class__,_('Text Replace'),'SetText',text) else: if object.text==toReplace: text=replaceTo app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod(object.__class__,_('Text Replace'),'SetText',text) else: if object.text.lower().find(toReplace.lower(), 0, len(object.text)) != -1: if not self.var_case_sensitive.get(): text=object.text.lower().replace(toReplace.lower(), replaceTo) else: text=object.text.replace(toReplace, replaceTo) app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod(object.__class__,_('Text Replace'),'SetText',text) if object.is_Group: self.replace_text(object.objects) ################################################################ def replace(self): textObjects=[] textToReplace=self.find_var.get().decode('utf-8') replaceTo=self.replace_var.get().decode('utf-8') for layer in app.mw.document.layers: self.replace_text(layer.objects, textToReplace, replaceTo) app.mw.canvas.ForceRedraw() ################################################################ def disable_enable_action(self): if self.var_regexp.get(): self.whole_word_check['state'] = DISABLED else: self.whole_word_check['state'] = NORMAL ################################################################ def whole_word_action(self): pass
def _quit(): root.quit() # stops mainloop root.destroy() # this is necessary on Windows to prevent # Fatal Python Error: PyEval_RestoreThread: NULL tstate # GUI root = Tk() data_path = StringVar() cellNumberChoosed = StringVar() trashhold = StringVar() trashhold.set(1) bool_save = BooleanVar() boolPolar = BooleanVar() boolPolar.set(True) lineType = StringVar() lineType.set("None") data_path.set('First of all, open a file!') extention = StringVar() extention.set(".png") # default value correlSpikesStancesAnswer = StringVar() Button(text='Open', command=f_open).pack() Label(root, textvariable=data_path).pack() frame1 = Frame(root) frame1.pack() Button(frame1, text='Most common spikes list', command=lambda: most_common_spikes(True)).pack(side='left')
class ScalePanel(PluginPanel): name = 'ScaleAndMirror' title = _("Scale and Mirror") def init(self, master): PluginPanel.init(self, master) self.width_priority = 1 root = self.mw.root self.var_width = DoubleVar(root) self.var_height = DoubleVar(root) unit = '%' jump = 5 self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side=TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side=TOP, fill=BOTH) label = TLabel(size_frameH, style='FlatLabel', image='size_h') label.pack(side=LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=100, vartype=1, textvariable=self.var_width, min=-30000, max=30000, step=jump, width=6, command=self.apply_scale) self.entry_width.pack(side=LEFT) self.entry_width.down_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.down_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.entry.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<FocusOut>', self.entry_width_chang) self.entry_width.entry.bind('<FocusIn>', self.entry_width_FocusIn) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text=unit) self.labelwunit.pack(side=LEFT, padx=5) self.hflip = BooleanVar(root) self.hflip.set(0) button = TCheckbutton(size_frameH, image="pstrip_hflip", style='ToolBarCheckButton', variable=self.hflip, command=None) button.pack(side=LEFT) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side=TOP, fill=BOTH) label = TLabel(size_frameV, style='FlatLabel', image='size_v') label.pack(side=LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=100, vartype=1, textvariable=self.var_height, min=-30000, max=30000, step=jump, width=6, command=self.apply_scale) self.entry_height.pack(side=LEFT) self.entry_height.down_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.down_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.entry.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<FocusOut>', self.entry_height_chang) self.entry_height.entry.bind('<FocusIn>', self.entry_height_FocusIn) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text=unit) self.labelhunit.pack(side=LEFT, padx=5) self.vflip = BooleanVar(root) self.vflip.set(0) button = TCheckbutton(size_frameV, image="pstrip_vflip", style='ToolBarCheckButton', variable=self.vflip, command=None) button.pack(side=LEFT) #--------------------------------------------------------- # Proportional chek self.proportional_check = TCheckbutton(top, text=_("Proportional"), variable=self.var_proportional, command=self.proportional) self.proportional_check.pack(side=TOP, anchor=W, padx=5, pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text=_("Basepoint:")) label.pack(side=TOP, fill=BOTH, padx=5) basepoint_frame = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side=TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side=LEFT, fill=BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image='coordinate_sys') label.pack(side=LEFT, fill=BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side=BOTTOM, fill=BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text=_("Apply"), command=self.apply_scale) self.button.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X, pady=3) self.button_copy = UpdatedButton(top, text=_("Apply to Copy"), command=self.apply_to_copy) self.button_copy.pack(in_=button_frame, side=BOTTOM, expand=1, fill=X) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) def init_from_doc(self, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.proportional_check['state'] = NORMAL self.button['state'] = NORMAL self.button_copy['state'] = NORMAL else: self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.proportional_check['state'] = DISABLED self.button['state'] = DISABLED self.button_copy['state'] = DISABLED def entry_width_FocusIn(self, *arg): self.width_priority = 1 def entry_height_FocusIn(self, *arg): self.width_priority = 0 def ScaleSelected(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale") if self.document.selection: self.document.begin_transaction(text) try: try: br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom if cnt_x is None: cnt_x = hor_sel / 2 + br.left if cnt_y is None: cnt_y = ver_sel / 2 + br.bottom trafo = Trafo(h, 0, 0, v, cnt_x - cnt_x * h, cnt_y - cnt_y * v) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def ScaleAndCopy(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale&Copy") if self.document.selection: self.document.begin_transaction(text) try: try: br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom if cnt_x is None: cnt_x = hor_sel / 2 + br.left if cnt_y is None: cnt_y = ver_sel / 2 + br.bottom trafo = Trafo(h, 0, 0, v, cnt_x - cnt_x * h, cnt_y - cnt_y * v) self.document.ApplyToDuplicate() self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def entry_height_chang(self, *arg): if self.var_proportional.get(): self.var_width.set(self.var_height.get()) def entry_width_chang(self, *arg): if self.var_proportional.get(): self.var_height.set(self.var_width.get()) def proportional(self): if self.width_priority: self.entry_width_chang() else: self.entry_height_chang() def apply_scale(self, *arg): if self.button["state"] == DISABLED: return self.proportional() width = self.var_width.get() height = self.var_height.get() br = self.document.selection.coord_rect hor_sel = br.right - br.left ver_sel = br.top - br.bottom cnt_x, cnt_y = self.Basepoint.get_basepoint(hor_sel, ver_sel, br.left, br.bottom) h = width / 100 if h == 0: h = 1 if self.hflip.get(): h = -1 * h v = height / 100 if v == 0: v = 1 if self.vflip.get(): v = -1 * v if arg and arg[0] == 'Duplicate': self.ScaleAndCopy(h, v, cnt_x, cnt_y) else: self.ScaleSelected(h, v, cnt_x, cnt_y) def apply_to_copy(self): self.apply_scale('Duplicate') def is_selection(self): return (len(self.document.selection) > 0)
class Restraints(object): def __init__(self, parent, bondForceParams, atoms_def): self.parent = parent self.main = Toplevel(self.parent) self.bondForceParams = bondForceParams self.atoms_def = atoms_def self.main.title('PyFepRestr') self.validated_values = [] if platform == "darwin": self.button_font = self.label_font = self.radiobutton_font = Font( family='Arial', size=15) else: self.radiobutton_font = Font(font=Radiobutton()["font"]) self.label_font = Font(font=Label()["font"]) self.button_font = Font(font=Button()["font"]) self.r_var = BooleanVar() self.r_var.set(1) rj1 = Radiobutton(self.main, text='kJ', variable=self.r_var, value=0, command=self.refresh, font=self.radiobutton_font) rcal1 = Radiobutton(self.main, text="kCal", variable=self.r_var, value=1, command=self.refresh, font=self.radiobutton_font) rj1.grid(row=0, column=0, padx=5, pady=5) rcal1.grid(row=0, column=1, padx=5, pady=5) labels = [ 'Temp', 'K raA', u'K \u03b8a', u'K \u03b8A', u'K \u03c6ba', u'K \u03c6aA', u'K \u03c6AB' ] label_all = [] self.entry_all = [] self.entry_all_get = [] self.dimen_all = [] for lab in labels: label_answer = Label(self.main, text=lab, anchor=W, font=self.label_font) label_all.append(label_answer) entry = Entry(self.main) self.entry_all.append(entry) self.entry_all_get.append(entry.get) dimen = Label(self.main, anchor=W, font=self.label_font) self.dimen_all.append(dimen) for i, (label, entry, dimen) in enumerate( zip(label_all, self.entry_all, self.dimen_all)): label.grid(row=i + 1, column=1, padx=5, pady=5, sticky=W) entry.grid(row=i + 1, column=2, padx=5, pady=5, sticky=W) dimen.grid(row=i + 1, column=3, padx=10, pady=5, sticky=W) self.dimen_all[0]['text'] = 'Kelvin' self.refresh() self.button_res = Button(self.main, text="Next -> ", command=self.validate, font=self.button_font) self.button_res.grid(row=11, column=2, padx=5, pady=5) self.destroyProgr = Button(self.main, text='Exit', bg='red', command=self.main.destroy, font=self.button_font) self.destroyProgr.grid(row=0, column=3, padx=5, pady=5) self.helpProgr = Button(self.main, text=' ? ', bg='#ffb3fe', command=self.getHelp, font=self.button_font) self.helpProgr.grid(row=12, column=0, padx=5, pady=5) self.select_atoms = StringVar() self.select_atoms.set("Select 6 atoms") atoms_list = ["Select 6 atoms", "Select 2 atoms"] menu = OptionMenu(self.main, self.select_atoms, *atoms_list) menu.grid(row=11, column=3, padx=5, pady=5) def refresh(self): if self.r_var.get(): self.dimen_all[1].configure(text=u'kCal/mol/\u212b\u00b2') for dimen in self.dimen_all[2:]: dimen.configure(text=u'kCal/mol/rad\u00b2') else: self.dimen_all[1].configure(text=u'kJ/mol/\u212b\u00b2') for dimen in self.dimen_all[2:]: dimen.configure(text=u'kJ/mol/rad\u00b2') for dimen in self.dimen_all: dimen.update() def validate(self): for i, k in enumerate(self.entry_all_get): try: f = float(k()) if f <= 0: raise ValueError self.entry_all[i]['bg'] = 'white' except ValueError: self.entry_all[i]['bg'] = "red" return self.validated_values.append(f) self.finish() def finish(self): if self.r_var.get(): self.validated_values = list((self.validated_values[0],)) + \ list(map(kCal_to_kJ, self.validated_values[1:])) self.bondForceParams['T'] = self.validated_values[0] # Temperature (K) self.bondForceParams['K_r_aA'] = self.validated_values[ 1] * 100 # force constant for distance (kJ/mol/nm^2) self.bondForceParams['K_th_a'] = self.validated_values[ 2] # force constant for angle (kJ/mol/rad^2) self.bondForceParams['K_th_A'] = self.validated_values[ 3] # force constant for angle (kJ/mol/rad^2) self.bondForceParams['K_phi_ba'] = self.validated_values[ 4] # force constant for dihedral (kJ/mol/rad^2) self.bondForceParams['K_phi_aA'] = self.validated_values[ 5] # force constant for dihedral (kJ/mol/rad^2) self.bondForceParams['K_phi_AB'] = self.validated_values[ 6] # force constant for dihedral (kJ/mol/rad^2) showinfo('Info', 'Now choose the atoms you need') if self.select_atoms.get() == 'Select 6 atoms': wiz = RestraintWizard(self.parent, self.bondForceParams, self.atoms_def) else: wiz = RestraintWizardTwo(self.parent, self.bondForceParams, self.atoms_def) cmd.set_wizard(wiz) cmd.refresh_wizard() self.main.withdraw() self.main.destroy() @staticmethod def getHelp(): with tempfile.NamedTemporaryFile('w', delete=False, suffix='.html') as f: url = "file://" + f.name f.write(help_1) webbrowser.open(url)
class Plotter(object): def __init__(self, fig): self._scope = None self.fig = fig self.plt = fig.add_subplot(111) self.ch1, self.ch2 = self.plt.plot([], [], [], []) self.pool = ThreadPool() self.ch1b = BooleanVar() self.ch1b.set(True) self.ch2b = BooleanVar() self.ch2b.set(True) self._fft = BooleanVar() self._fft.set(False) self._xy = BooleanVar() self._xy.set(False) self._USB_voltage = None @property def scope(self): return self._scope @scope.setter def scope(self, port): self._scope = DPScope(port) @property def both_channels(self): return self.ch1b.get() and self.ch2b.get() @property def xy(self): return self._xy.get() @property def fft(self): return self._fft.get() @property def USB_voltage(self): if not self._USB_voltage: self.scope.adcon_from(0) self.scope.set_dac(0, 3000) self.scope.set_dac(1, 3000) real_dac = sum(self.scope.measure_offset()) / 2 self.scope.set_dac(0, 0) self.scope.set_dac(1, 0) nominal_dac = 3 * (1023 / 5.) self._USB_voltage = 5. * (nominal_dac / real_dac) return self._USB_voltage def to_volt(self, adc, gain=1, pregain=1): multiplier = (self.USB_voltage/5.) * (20./256) * pregain * gain return adc * multiplier def read_volt(self): return map(self.to_volt, self.scope.read_adc()) def poll(self): self.arm() self.plot(*self.parse(self.read())) self.scope.abort() def read(self, nofb=205): data = None while not data: data = self.scope.read_back(nofb) return data[1:] # need first byte? def parse(self, data): ch1 = data ch2 = [] if self.both_channels: ch1, ch2 = channels(data) if self.fft: ch1 = fft(ch1) ch2 = fft(ch2) if self.xy: return ch1, ch2, [], [] else: return [], ch1, [], ch2 def reader(self, nofb=205): while True: yield self.read(nofb) def arm(self): if self.both_channels: self.scope.arm(0) else: self.scope.arm_fft(0, self.ch1b.get() or self.ch2b.get()*2) def plot(self, x1=[], y1=[], x2=[], y2=[]): if len(y1) and not len(x1): x1 = range(len(y1)) if len(y2) and not len(x2): x2 = range(len(y2)) self.ch1.set_data(x1, y1) self.ch2.set_data(x2, y2) self.plt.relim() self.plt.autoscale_view() self.fig.canvas.draw()
class App(Frame): def __init__(self, master=None): self.master = master Frame.__init__(self, master, relief=SUNKEN, bd=2) self.gcode = [] self.slicing = False self.printing = False self.connected = False self.monitorTemp = False self.paused = False self.sdpresent = False self.sdlisting = False self.sdchecking = False self.sdprinting = False self.sdpaused = False self.sduploading = False self.sdbytes = 0 self.sdmaxbytes = 0 self.insidelisting = False self.readingFirmware = False self.sdfiles = [] self.bedtemp = float(0) self.bedtarget = float(0) self.exttemp = float(0) self.exttarget = float(0) self.acceleration = 0 self.m114count = 0 self.speedcount = 0 self.location = [0, 0, 0, 0] self.pausePoint = [0, 0, 0, 0] self.percent = 0.0 self.ets = "??" self.gcodeInfo = None self.GCodeFile = None self.StlFile = None self.Profile = None self.printStartLine = 0 self.startTime = 0 self.endTime = 0 self.elapsedTime = 0 self.FanSpeed = 0 self.FeedMultiply = 100 self.ExtrudeMultiply = 100 self.timingReport = None self.filamentReport = None self.measurementsReport = None self.macroButtons = None self.rpt1re = re.compile(" *T:([0-9\.]+) *E:[0-9\.]+ *B:([0-9\.]+)") self.rpt2re = re.compile(" *T:([0-9\.]+) *E:[0-9\.]+ *W:.*") self.locrptre = re.compile("^X:([0-9\.\-]+)Y:([0-9\.\-]+)Z:([0-9\.\-]+)E:([0-9\.\-]+) *Count") self.speedrptre = re.compile("Fan speed:([0-9]+) Feed Multiply:([0-9]+) Extrude Multiply:([0-9]+)") self.sdre = re.compile("SD printing byte *([0-9]+) *\/ *([0-9]+)") self.printer = printcore() self.settings = Settings() self.settings.cmdFolder = cmd_folder self.logger = Logger(self) if self.settings.speedcommand is not None: allow_while_printing.append(self.settings.speedcommand) self.acceleration = self.settings.acceleration self.dataLoggers = {} for d in DLLIST: self.dataLoggers[d] = DataLogger(self, d) self.skeinforge = Skeinforge(self.settings) self.slic3r = Slic3r(self.settings) self.httpServer = RepRapServer(self, self.printer, self.settings, self.logger, self.settings.port) self.menubar = Menu(self) self.filemenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="File", menu=self.filemenu) self.filemenu.add_command(label="Slice", command=self.openSTLFile) self.filemenu.add_command(label="Load GCode", command=self.openGCodeFile) self.slicemenuindex = self.filemenu.index("Slice") self.loadgcodemenuindex = self.filemenu.index("Load GCode") self.filemenu.add_separator() self.filemenu.add_command(label="Exit", command=self.quitApp) self.editmenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="Edit", menu=self.editmenu) self.editmenu.add_command(label="Settings", command=self.editSettings) self.editmenu.add_command(label="Firmware Settings", command=self.FirmwareSettings) self.editmenu.add_separator() self.editmenu.add_command(label=GCODE_MENU_TEXT, command=self.doGEdit, state=DISABLED) self.slicermenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="Slicer", menu=self.slicermenu) self.rbSlicer = StringVar() self.slicermenu.add_radiobutton( label="Skeinforge", command=self.selSlicer, value=SKEINFORGE, variable=self.rbSlicer ) self.slicermenu.add_command(label="Settings", command=self.skeinforgeSettings) self.slicermenu.add_command(label="Choose Profile", command=self.chooseSFProfile) self.SFprofileindex = self.slicermenu.index("Choose Profile") self.setSFProfileMenuText() self.slicermenu.add_command(label="Alterations", command=self.doEditAlterations) self.slicermenu.add_separator() self.slicermenu.add_radiobutton(label="Slic3r", command=self.selSlicer, value=SLIC3R, variable=self.rbSlicer) self.slicermenu.add_command(label="Settings", command=self.slic3rSettings) self.slicermenu.add_command(label="Choose Profile", command=self.chooseS3Profile) self.S3profileindex = self.slicermenu.index("Choose Profile") self.setS3ProfileMenuText() self.rbSlicer.set(self.settings.slicer) self.macromenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="Macros", menu=self.macromenu) self.macromenu.add_command(label="New", command=self.doNewMacro) self.macromenu.add_command(label="Edit", command=self.doEditMacro) self.macromenu.add_command(label="Delete", command=self.doDelMacro) self.macromenu.add_separator() self.cbShowMacroButtons = BooleanVar() self.cbShowMacroButtons.set(self.settings.showmacrobuttons) self.macromenu.add_checkbutton( label="Show Macro Buttons", command=self.doShowButtons, onvalue=True, offvalue=False, variable=self.cbShowMacroButtons, ) self.macromenu.add_separator() self.runmacromenu = Menu(self.macromenu, tearoff=0) self.loadMacros() self.macromenu.add_cascade(label="Run", menu=self.runmacromenu) self.reportmenu = Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="View", menu=self.reportmenu) self.cbShowPrevious = BooleanVar() self.cbShowPrevious.set(self.settings.showprevious) self.reportmenu.add_checkbutton( label="Show Previous Layer", command=self.toggleShowPrevious, onvalue=True, offvalue=False, variable=self.cbShowPrevious, ) self.cbShowMoves = BooleanVar() self.cbShowMoves.set(self.settings.showmoves) self.reportmenu.add_checkbutton( label="Show Non-extrusion Moves", command=self.toggleShowMoves, onvalue=True, offvalue=False, variable=self.cbShowMoves, ) self.reportmenu.add_separator() self.reportmenu.add_command(label="Show Hours of Usage", command=self.doDataLogReport) self.reportmenu.add_command(label="Reset Hours of Usage", command=self.doDataLogReset) self.reportmenu.add_separator() self.reportmenu.add_command(label="Layer by Layer Timing", command=self.doTimingReport) self.reportmenu.add_command(label="Layer by Layer Filament Usage", command=self.doFilamentReport) self.reportmenu.add_command(label="GCode Measurements", command=self.doMeasurementsReport) self.toolsmenu = Menu(self.menubar, tearoff=0) n = 0 if self.settings.platercmd is not None: n += 1 self.toolsmenu.add_command(label="Plater", command=self.doPlater) if self.settings.gcodeviewcmd is not None: n += 1 self.toolsmenu.add_command(label="GCode Viewer", command=self.doGCodeView) if self.settings.stlviewcmd is not None: n += 1 self.toolsmenu.add_command(label="STL Viewer", command=self.doSTLView) if self.settings.openscadcmd is not None: n += 1 self.toolsmenu.add_command(label="OpenSCAD", command=self.doOpenSCAD) if n > 0: self.menubar.add_cascade(label="Tools", menu=self.toolsmenu) try: self.master.config(menu=self.menubar) except AttributeError: self.master.tk.call(master, "config", "-menu", self.menubar) self.toolbar = ToolBar(self, self.printer, self.settings, self.logger) self.toolbar.grid(row=1, column=1, columnspan=4, sticky=W) self.ctl = MoveControl(self, self.printer, self.settings, self.logger) self.ctl.grid(row=2, column=1, rowspan=3, sticky=N) self.extr = Extruder(self, self.printer, self.settings, self.logger) self.extr.grid(row=2, column=2, rowspan=1, sticky=N + E + W) self.temps = Temperatures(self, self.printer, self.settings, self.logger) self.temps.grid(row=3, column=2, rowspan=2, sticky=N + E + W) self.gc = GcFrame(self, None, [], self.settings, self.logger) self.gc.grid(row=2, column=3, rowspan=3, sticky=N) self.statline = Status(self, self.printer, self.settings, self.logger) self.statline.grid(row=5, column=1, columnspan=4, sticky=E + W) self.logger.grid(row=2, column=4, rowspan=2, sticky=N + E + W) self.sendgcode = SendGCode(self, self.printer, self.settings, self.logger) self.sendgcode.grid(row=4, column=4, sticky=N + E + W) self.printer.errorcb = self.errorcb self.printer.sendcb = self.sendcb self.printer.recvcb = self.recvcb self.sd = SDCard(self, self.printer, self.settings, self.logger) self.firmware = FirmwareParms(self, self.printer, self.settings, self.logger) self.bind(MWM_FIRMWARECOMPLETE, self.firmwareReportComplete) self.bind(MWM_SLICERCOMPLETE, self.sliceComplete) self.bind(MWM_GCODELOADCOMPLETE, self.loadgcodeFinished) self.bind(MWM_GEDITMEASURECOMPLETE, self.geditMeasureComplete) self.bind(MWM_REQUESTPOSITIONREPORT, self.requestPosition) self.doShowButtons() def doStopAll(self): self.toolbar.doPause() self.temps.doOffBed() self.temps.doOffExt() def requestPosition(self, *arg): self.m114count += 1 self.printer.send_now("M400") # finish all moves self.printer.send_now("M114") def doShowButtons(self): self.settings.showmacrobuttons = self.cbShowMacroButtons.get() == 1 self.settings.setModified() if self.settings.showmacrobuttons: self.macroButtons = MacroButtons(self, self.printer, self.settings, self.logger) else: if self.macroButtons: self.macroButtons.close() self.macroButtons = None def toggleShowPrevious(self): self.settings.showprevious = self.cbShowPrevious.get() == 1 self.settings.setModified() self.gc.drawCanvas() def toggleShowMoves(self): self.settings.showmoves = self.cbShowMoves.get() == 1 self.settings.setModified() self.gc.drawCanvas() def selSlicer(self): self.settings.slicer = self.rbSlicer.get() self.settings.setModified() self.toolbar.setSliceText() def macroButtonClose(self): self.settings.showmacrobuttons = False self.settings.setModified() self.cbShowMacroButtons.set(False) def firmwareReportComplete(self, *arg): p = self.firmware.reportComplete() if p is not None: self.acceleration = p["m204_s"].getFlash() print "Retrieved acc value of ", self.acceleration def openSTLFile(self): if self.printing: self.logger.logMsg("Cannot open a new file while printing") return if self.StlFile is None: fn = askopenfilename( filetypes=[("STL files", "*.stl"), ("G Code files", "*.gcode")], initialdir=self.settings.lastdirectory ) else: fn = askopenfilename( filetypes=[("STL files", "*.stl"), ("G Code files", "*.gcode")], initialdir=self.settings.lastdirectory, initialfile=os.path.basename(self.StlFile), ) if fn: self.settings.lastdirectory = os.path.dirname(os.path.abspath(fn)) self.settings.setModified() if fn.lower().endswith(".gcode"): self.StlFile = None self.loadgcode(fn) elif fn.lower().endswith(".stl"): self.StlFile = fn self.doSlice(fn) else: self.logger.logMsg("Invalid file type") def openGCodeFile(self): if self.printing: self.logger.logMsg("Cannot open a new file while printing") return fn = askopenfilename(filetypes=[("G Code files", "*.gcode")], initialdir=self.settings.lastdirectory) if fn: self.settings.lastdirectory = os.path.dirname(os.path.abspath(fn)) self.settings.setModified() if fn.lower().endswith(".gcode"): self.StlFile = None self.loadgcode(fn) else: self.logger.logMsg("Invalid file type") else: self.toolbar.clearCancelMode() def loadgcode(self, fn): self.GCodeFile = fn self.gcodeloadSuccess = True self.toolbar.setLoading(True) self.loader = threading.Thread(target=self.loadgcodeThread) self.loader.daemon = True self.loader.start() def loadgcodeFinished(self, *arg): self.toolbar.setLoading(False) if self.gcodeloadSuccess: self.showMetrics() def loadgcodeThread(self): try: self.gcode = [] l = list(open(self.GCodeFile)) for s in l: self.gcode.append(s.rstrip()) self.logger.logMsg("read %d lines from %s" % (len(self.gcode), os.path.basename(self.GCodeFile))) except: self.logger.logMsg("Problem reading gcode from %s" % self.GCodeFile) self.gcode = [] self.GCodeFile = None if len(self.gcode) != 0: self.logger.logMsg("Processing...") self.gc.loadFile(self.GCodeFile, self.gcode) self.printStartLine = self.gc.getPrintStartLine() self.gcodeInfo = GCode(self.gcode) self.logger.logMsg("Measuring...") self.gcodeInfo.measure(self.acceleration) self.estEta = self.gcodeInfo.totalduration self.timeLayers = self.gcodeInfo.layerdurations else: self.gcodeloadSuccess = False self.event_generate(MWM_GCODELOADCOMPLETE) def replace(self, s, slicer): if slicer == SLIC3R: d = os.path.expandvars(os.path.expanduser(self.settings.s3profiledir)) profile = os.path.join(d, self.slic3r.getProfile() + ".ini") else: profile = self.skeinforge.getProfile() d = {} d["%starttime%"] = time.strftime("%H:%M:%S", time.localtime(self.startTime)) d["%endtime%"] = time.strftime("%H:%M:%S", time.localtime(self.endTime)) d["%elapsed%"] = formatElapsed(self.elapsedTime) d["%profile%"] = profile d["%slicer%"] = self.settings.slicer if self.StlFile is not None: d["%stlbase%"] = os.path.basename(self.StlFile) d["%stl%"] = self.StlFile else: d["%stlbase%"] = "" d["%stl%"] = "" if self.GCodeFile is not None: d["%gcodebase%"] = os.path.basename(self.GCodeFile) d["%gcode%"] = self.GCodeFile else: d["%gcodebase%"] = "" d["%gcode%"] = "" for t in d.keys(): if d[t] is not None: s = s.replace(t, d[t]) s = s.replace('""', "") return s def showMetrics(self): if len(self.gcode) != 0: self.paused = False self.toolbar.initializeToolbar() self.toolbar.checkAllowPrint() self.allowGEdit() self.logger.logMsg( "Width: %f mm (%f -> %f)" % (self.gcodeInfo.width, self.gcodeInfo.xmin, self.gcodeInfo.xmax) ) self.logger.logMsg( "Depth: %f mm (%f -> %f)" % (self.gcodeInfo.depth, self.gcodeInfo.ymin, self.gcodeInfo.ymax) ) self.logger.logMsg( "Height: is %f mm (%f -> %f)" % (self.gcodeInfo.height, self.gcodeInfo.zmin, self.gcodeInfo.zmax) ) self.logger.logMsg("Total extrusion length: %f mm" % self.gcodeInfo.filament_length()) self.logger.logMsg("Estimated print time: %s" % formatElapsed(self.estEta)) def calcEta(self, line, timeThusFar): foundLayer = False for i in range(len(self.timeLayers)): if self.timeLayers[i][0] > line: foundLayer = True break if not foundLayer: return 0 currentLayer = i - 1 if currentLayer < 0: return 0 totalInLayer = self.timeLayers[i][0] - self.timeLayers[currentLayer][0] printedInLayer = line - self.timeLayers[currentLayer][0] pct = printedInLayer / float(totalInLayer) thisLayerTime = (self.timeLayers[currentLayer][1]) * pct ratio = (self.timeLayers[currentLayer][2] - self.timeLayers[currentLayer][1] + thisLayerTime) / float( timeThusFar ) ne = self.estEta / float(ratio) return ne - timeThusFar def doTimingReport(self): if not self.printing: self.logger.logMsg("Only available while printing") return self.timingReport = TimingReport(self, self.printer, self.settings, self.logger) def closeTimingReport(self): if self.timingReport is not None: self.timingReport.cleanup() self.timingReport.destroy() self.timingReport = None def doMeasurementsReport(self): if not self.gcodeInfo: self.logger.logMsg("Only available when GCode loaded") return self.measurementsReport = MeasurementsReport(self, self.printer, self.settings, self.logger) def closeMeasurementsReport(self): if self.measurementsReport is not None: self.measurementsReport.destroy() self.measurementsReport = None def doFilamentReport(self): if not self.gcodeInfo: self.logger.logMsg("Only available when GCode loaded") return if len(self.gcodeInfo.filLayers) == 0: self.logger.logMsg("No filament usage in this gcode") return self.filamentReport = FilamentReport(self, self.printer, self.settings, self.logger) def closeFilamentReport(self): if self.filamentReport is not None: self.filamentReport.destroy() self.filamentReport = None def closeAllReports(self): self.closeTimingReport() self.closeFilamentReport() self.closeMeasurementsReport() def doPlater(self): s = self.replace(self.settings.platercmd, self.settings.slicer) args = shlex.split(os.path.expandvars(os.path.expanduser(s))) subprocess.Popen(args, close_fds=True) def doGCodeView(self): s = self.replace(self.settings.gcodeviewcmd, self.settings.slicer) args = shlex.split(os.path.expandvars(os.path.expanduser(s))) subprocess.Popen(args, close_fds=True) def doSTLView(self): s = self.replace(self.settings.stlviewcmd, self.settings.slicer) self.logger.logMsg(s) args = shlex.split(os.path.expandvars(os.path.expanduser(s))) subprocess.Popen(args, close_fds=True) def doOpenSCAD(self): s = self.replace(self.settings.openscadcmd, self.settings.slicer) args = shlex.split(os.path.expandvars(os.path.expanduser(s))) subprocess.Popen(args, close_fds=True) def doSlice(self, fn): self.paused = False self.toolbar.initializeToolbar() self.slicerfn = fn self.slicing = True self.slicerCancel = False self.toolbar.setCancelMode() if self.settings.slicer == SLIC3R: self.GCodeFile = fn.replace(".stl", ".gcode") cmd = self.replace(os.path.expandvars(os.path.expanduser(self.settings.s3cmd)), SLIC3R) else: self.GCodeFile = fn.replace(".stl", "_export.gcode") cmd = self.replace(os.path.expandvars(os.path.expanduser(self.settings.sfcmd)), SKEINFORGE) self.slicer = threading.Thread(target=self.slicerThread, args=(cmd,)) self.slicer.daemon = True self.slicer.start() def slicerThread(self, cmd): args = shlex.split(cmd) p = subprocess.Popen(args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE) obuf = "" while not self.slicerCancel: o = p.stdout.read(1) if o == "": break if o == "\r" or o == "\n": self.logger.logMsg(obuf) obuf = "" elif ord(o) < 32: pass else: obuf += o if self.slicerCancel: p.kill() p.wait() self.event_generate(MWM_SLICERCOMPLETE) def sliceComplete(self, *arg): self.slicing = False self.toolbar.clearCancelMode() if self.slicerCancel: self.slicerCancel = False self.logger.logMsg("Slicing was cancelled") return self.logger.logMsg("Slicing has completed successfully") if os.path.exists(self.GCodeFile): self.loadgcode(self.GCodeFile) else: self.logger.logMsg("Unable to find slicer output file: %s" % self.GCodeFile) def allowGEdit(self): self.editmenu.entryconfig(self.editmenu.index(GCODE_MENU_TEXT), state=NORMAL) def allowSliceMenu(self, flag=True): s = NORMAL if not flag: s = DISABLED self.filemenu.entryconfig(self.slicemenuindex, state=s) def allowLoadGCodeMenu(self, flag=True): s = NORMAL if not flag: s = DISABLED self.filemenu.entryconfig(self.loadgcodemenuindex, state=s) def doGEdit(self): GEditor(self, self.gcode, None) def geditMeasureComplete(self, *arg): self.showMetrics() def gEditSave(self, newgcode, fn, editwindow): if fn == None: self.gcode = newgcode self.meas = threading.Thread(target=self.geditMeasureThread) self.meas.daemon = True self.meas.start() return False else: try: f = open(fn, "w") for l in newgcode: f.write(l + "\n") f.close() self.logger.logMsg("Alterations %s successfully saved" % fn) return True except: self.logger.logMsg("Unable to open %s for output" % fn) return False def geditMeasureThread(self): self.logger.logMsg("Processing...") self.gcodeInfo = GCode(self.gcode) self.logger.logMsg("Measuring...") self.gcodeInfo.measure(self.acceleration) self.estEta = self.gcodeInfo.totalduration self.timeLayers = self.gcodeInfo.layerdurations self.event_generate(MWM_GEDITMEASURECOMPLETE) def doSD(self): if not self.sd.isActive(): self.sd.start() def setToolbarSDPrint(self): self.toolbar.setSDPrint() def startUpload(self): self.sduploading = True self.toolbar.doPrint() def printerAvailable(self, silent=False, cmd="xx"): if not self.connected: if not silent: self.logger.logMsg("Unable to comply - printer not on-line") return False if (self.printing or self.sdprinting) and cmd.upper() not in allow_while_printing: if not silent: self.logger.logMsg("Unable to comply - currently printing") return False return True def printerConnected(self, flag): self.sendgcode.activate(flag) self.connected = flag if flag: self.firmware.start(True) def updateScreen(self): if self.printing: self.gc.updatePrintProgress(self.printer.queueindex) def errorcb(self, s): self.logger.logMsg(s.rstrip()) def sendcb(self, s): # self.logger.logMsg("Sent: %s" % s) pass def recvcb(self, s): if self.readingFirmware: if "M92" in s: X = self.parseG(s, "X") Y = self.parseG(s, "Y") Z = self.parseG(s, "Z") E = self.parseG(s, "E") self.firmware.m92(X, Y, Z, E) return elif "M201" in s: X = self.parseG(s, "X") Y = self.parseG(s, "Y") Z = self.parseG(s, "Z") E = self.parseG(s, "E") self.firmware.m201(X, Y, Z, E) return elif "M203" in s: X = self.parseG(s, "X") Y = self.parseG(s, "Y") Z = self.parseG(s, "Z") E = self.parseG(s, "E") self.firmware.m203(X, Y, Z, E) return elif "M204" in s: S = self.parseG(s, "S") T = self.parseG(s, "T") self.firmware.m204(S, T) return elif "M205" in s: S = self.parseG(s, "S") T = self.parseG(s, "T") B = self.parseG(s, "B") X = self.parseG(s, "X") Z = self.parseG(s, "Z") E = self.parseG(s, "E") self.firmware.m205(S, T, B, X, Z, E) return elif "M206" in s: X = self.parseG(s, "X") Y = self.parseG(s, "Y") Z = self.parseG(s, "Z") self.firmware.m206(X, Y, Z) return elif "M301" in s: P = self.parseG(s, "P") I = self.parseG(s, "I") D = self.parseG(s, "D") self.firmware.m301(P, I, D) return elif ( ("Steps per unit" in s) or ("Acceleration:" in s) or ("Maximum Acceleration" in s) or ("Maximum feedrates" in s) or ("Advanced variables" in s) or ("Home offset" in s) or ("PID settings" in s) or ("Stored settings retreived" in s) ): return if self.sdchecking: if "SD card ok" in s: self.sdchecking = False self.sdpresent = True self.sd.sdCheckComplete(True) return elif "SD init fail" in s: self.sdchecking = False self.sdpresent = False self.sd.sdCheckComplete(False) return if self.sdlisting: if "Begin file list" in s: self.insidelisting = True self.sdfiles = [] return elif "End file list" in s: self.sdlisting = False self.insidelisting = False self.sd.sdListComplete(self.sdfiles) return else: if self.insidelisting: self.sdfiles.append(s.strip()) return if "SD printing byte" in s: m = self.sdre.search(s) t = m.groups() if len(t) != 2: return self.sdbytes = int(t[0]) self.sdmaxbytes = int(t[1]) return elif "Done printing file" in s: if self.sdprinting: self.sdprinting = False self.toolbar.clearSDPrint() m = self.speedrptre.search(s) if m: t = m.groups() if len(t) >= 3: if self.settings.forcefanspeed: ns = int(t[0]) if ns != self.FanSpeed: self.logger.logMsg("Asserting fan speed of %d" % self.FanSpeed) self.toolbar.forceFanSpeed(self.FanSpeed) else: self.FanSpeed = int(t[0]) self.FeedMultiply = int(t[1]) self.ExtrudeMultiply = int(t[2]) self.toolbar.syncSpeeds() if self.speedcount > 0: self.speedcount -= 1 return m = self.locrptre.search(s) if m: t = m.groups() if len(t) >= 4: self.location[XAxis] = float(t[0]) self.location[YAxis] = float(t[1]) self.location[ZAxis] = float(t[2]) self.location[EAxis] = float(t[3]) if self.m114count != 0: self.m114count -= 1 if self.m114count < 0: self.m114count = 0 return if s.startswith("ok"): return if s.startswith("echo:"): s = s[5:] m = self.rpt1re.search(s) if m: t = m.groups() if len(t) >= 1: self.exttemp = float(t[0]) if len(t) >= 2: self.bedtemp = float(t[1]) self.temps.updateTempDisplay(self.bedtemp, self.exttemp) m = self.rpt2re.search(s) if m: t = m.groups() if len(t) >= 1: self.exttemp = float(t[0]) self.temps.updateTempDisplay(self.bedtemp, self.exttemp) self.logger.logMsg(s.rstrip()) def parseG(self, s, v): l = s.split() for p in l: if p.startswith(v): try: return float(p[1:]) except: return None return None def editSettings(self): # TO DO pass def slic3rSettings(self): s = self.replace(self.settings.s3config, SLIC3R) args = shlex.split(os.path.expandvars(os.path.expanduser(s))) subprocess.Popen(args, close_fds=True) def skeinforgeSettings(self): s = self.replace(self.settings.sfconfig, SKEINFORGE) args = shlex.split(os.path.expandvars(os.path.expanduser(s))) subprocess.Popen(args, close_fds=True) def chooseS3Profile(self): pl = self.slic3r.getProfileOptions() if len(pl) > 0: l = ListBoxChoice( clist=pl.keys(), master=self, title="Choose Slic3r Profile", message="Choose Slic3r profile" ) pn = l.returnValue() if pn: self.slic3r.setProfile(pn) self.setS3ProfileMenuText() self.toolbar.setSliceText() else: self.logger.logMsg("Unable to retrieve available slic3r profiles") def chooseSFProfile(self): pl = self.skeinforge.getProfileOptions() if len(pl) > 0: l = ListBoxChoice( clist=pl.keys(), master=self, title="Choose Skeinforge Profile", message="Choose Skeinforge profile" ) pn = l.returnValue() if pn: self.skeinforge.setProfile(pn) self.setSFProfileMenuText() self.toolbar.setSliceText() else: self.logger.logMsg("Unable to retrieve available skeinforge profiles") def setS3ProfileMenuText(self): self.slicermenu.entryconfig(self.S3profileindex, label="Choose Profile (%s)" % self.slic3r.getProfile()) def setSFProfileMenuText(self): self.slicermenu.entryconfig(self.SFprofileindex, label="Choose Profile (%s)" % self.skeinforge.getProfile()) def quitApp(self): self.cleanUp() self.master.quit() def cleanUp(self): if self.connected: self.printer.disconnect() if self.slicing: self.slicerCancel = True self.httpServer.close() self.statline.cleanUp() self.settings.cleanUp() def doEditMacro(self): idir = os.path.join(self.settings.cmdFolder, "macros") try: l = os.listdir(idir) except: self.logger.logMsg("Unable to get listing from macros directory: " + idir) return r = [] for f in sorted(l): if f.endswith(".macro"): r.append(f) l = ListBoxChoice(master=self, title="Macro Files", message="Choose a macro to edit", clist=r) fn = l.returnValue() if fn: try: fn = os.path.join(idir, fn) with open(fn) as f: text = f.read() self.macroEdit = MacroEdit(self, self.printer, self.settings, self.logger, fn, text) except: self.logger.logMsg("Unable to open %s for input" % fn) def doEditAlterations(self): idir = os.path.expandvars(os.path.expanduser(self.settings.sfalterationsdir)) try: l = os.listdir(idir) except: self.logger.logMsg("Unable to get listing from alterations directory: " + idir) return r = [] for f in sorted(l): if f.endswith(".gcode"): r.append(f) l = ListBoxChoice(master=self, title="Alteration Files", message="Choose an alteration file to edit", clist=r) fn = l.returnValue() if fn: try: fn = os.path.join(idir, fn) text = [line.strip() for line in open(fn)] GEditor(self, text, fn) except: self.logger.logMsg("Unable to open %s for input" % fn) def doNewMacro(self): self.macroEdit = MacroEdit(self, self.printer, self.settings, self.logger, None, "") def doDelMacro(self): idir = os.path.join(self.settings.cmdFolder, "macros") try: l = os.listdir(idir) except: self.logger.logMsg("Unable to get listing from macros directory: " + idir) return r = [] for f in sorted(l): if f.endswith(".macro"): r.append(f) l = ListBoxChoice(master=self, title="Macro Files", message="Choose a macro to delete", clist=r) fn = l.returnValue() if fn: if askyesno("Delete?", "Are you sure you want to delete this macro?", parent=self): try: os.unlink(os.path.join(idir, fn)) self.adjustMacroMenu(fn, True) if self.settings.getMacroList().delMacroByName(fn): self.settings.setModified() if self.settings.showmacrobuttons: self.macroButtons.close() self.macroButtons = MacroButtons(self, self.printer, self.settings, self.logger) except: self.logger.logMsg("Unable to delete %s" % fn) def macroEditSave(self, fn, text, btn, editwindow): if fn == None: idir = os.path.join(self.settings.cmdFolder, "macros") try: l = os.listdir(idir) except: self.logger.logMsg("Unable to get listing from macros directory: " + idir) return r = [] for f in sorted(l): if f.endswith(".macro"): r.append(f) l = ListBoxChoice( master=self, title="Macro Files", message="Choose a macro to overwrite", clist=r, newmessage="or enter new file name:", ) fn = l.returnValue() if fn: fn = os.path.join(idir, fn) if not fn.endswith(".macro"): fn += ".macro" if fn is None: return False try: f = open(fn, "w") f.write(text) f.close() self.settings.setModified() if btn != None: if not self.settings.getMacroList().addMacro(btn[0], btn[1], os.path.basename(fn), btn[2]): self.settings.getMacroList().setMacroByName(btn[0], btn[1], os.path.basename(fn), btn[2]) self.settings.setModified() if self.settings.showmacrobuttons: self.macroButtons.close() self.macroButtons = MacroButtons(self, self.printer, self.settings, self.logger) self.adjustMacroMenu(fn) self.logger.logMsg("Macro %s successfully saved" % fn) return True except: self.logger.logMsg("Unable to open %s for output" % fn) return False def macroEditExit(self, fn): pass def loadMacros(self): p = os.path.join(".", "macros") if not os.path.exists(p): os.makedirs(p) self.macroList = {} for filename in sorted(os.listdir(p)): if filename.endswith(".macro"): n = os.path.splitext(filename)[0] self.macroList[n] = 1 self.runmacromenu.add_command(label=n, command=lambda m=n: self.doMacro(m)) def adjustMacroMenu(self, fn, delete=False): mn = os.path.splitext(os.path.basename(fn))[0] if not delete: if mn in self.macroList: # nothing to be done here pass else: self.macroList[mn] = 1 self.runmacromenu.add_command(label=mn, command=lambda m=mn: self.doMacro(name=mn)) else: # delete the menu entry if mn in self.macroList: self.runmacromenu.delete(self.runmacromenu.index(mn)) del self.macroList[mn] else: # huh?? pass def doMacro(self, name=None, fname=None, silent=False): if name: if not silent: self.logger.logMsg("Invoking macro: %s" % name) n = os.path.join(self.settings.cmdFolder, "macros", name + ".macro") elif fname: if not silent: self.logger.logMsg("Invoking macro file: %s" % fname) n = os.path.join(self.settings.cmdFolder, "macros", fname) else: self.logger.logMsg("Error - must provide a macro name or filename") return try: l = list(open(n)) for s in l: sl = s.lower() if sl.startswith("@log "): self.logger.logMsg(self.replace(s[5:].strip(), self.settings.slicer)) elif sl.startswith("@sh "): s = self.replace(sl[4:], self.settings.slicer) args = shlex.split(os.path.expandvars(os.path.expanduser(s))) subprocess.Popen(args, close_fds=True) else: verb = s.split()[0] if self.printerAvailable(cmd=verb): self.printer.send_now(s) else: self.logger.logMsg("Printer not available for %s command" % verb) if not silent: self.logger.logMsg("End of macro") except: self.logger.logMsg("Error attempting to invoke macro file %s" % n) def FirmwareSettings(self): if self.connected: if not self.firmware.isActive(): self.firmware.start() else: self.logger.logMsg("Unable to comply - printer not on-line") def doDataLogReport(self): for d in DLLIST: self.logger.logMsg("%s Usage: %s" % (DLNAMES[d], self.dataLoggers[d].getToNowStr())) def doDataLogReset(self): DataLogReset(self)
class Cap(Frame): def __init__(self): ' set defaults, create widgets, bind callbacks, start live view ' self.root = Tk() # menu: self.menu = Menu(self.root) self.root.config(menu=self.menu) # bind global keypresses: self.root.bind('q', lambda e: self.root.quit()) self.root.bind('x', lambda e: self.root.quit()) self.root.bind('<Destroy>', self.do_stop_video) self.root.bind('<space>', self.do_single_shot) self.root.bind('<Return>', self.do_single_shot) self.root.bind('<Button-3>', self.do_single_shot) self.root.bind('<Left>', lambda e: self.degree.set(-90)) self.root.bind('<Right>', lambda e: self.degree.set(90)) self.root.bind('<Up>', lambda e: self.degree.set(0)) self.root.bind('a', lambda e: self.autocontrast.set(not self.autocontrast.get())) self.root.bind('e', lambda e: self.equalize.set(not self.equalize.get())) self.root.bind('g', lambda e: self.grayscale.set(not self.grayscale.get())) self.root.bind('i', lambda e: self.invert.set(not self.invert.get())) self.root.bind('s', lambda e: self.solarize.set(not self.solarize.get())) # config: self.config = RawConfigParser() self.config.read('filmroller.conf') if not self.config.has_section('global'): self.config.add_section('global') self.video = None self.invert = BooleanVar(name='invert') self.invert.set(self.config_get('invert', True)) self.invert.trace('w', self.do_configure) self.grayscale = BooleanVar(name='grayscale') self.grayscale.set(self.config_get('grayscale', False)) self.grayscale.trace('w', self.do_configure) self.autocontrast = BooleanVar(name='autocontrast') self.autocontrast.set(self.config_get('autocontrast', True)) self.autocontrast.trace('w', self.do_configure) self.equalize = BooleanVar(name='equalize') self.equalize.set(self.config_get('equalize', False)) self.equalize.trace('w', self.do_configure) self.solarize = BooleanVar(name='solarize') self.solarize.set(self.config_get('solarize', False)) self.solarize.trace('w', self.do_configure) self.degree = IntVar(name='degree') self.degree.set(0) self.filename = StringVar(name='filename') self.videodevice = StringVar(name='videodevice') dev_names = sorted(['/dev/{}'.format(x) for x in listdir('/dev') if x.startswith('video')]) d = self.config_get('videodevice', dev_names[-1]) if not d in dev_names: d = dev_names[-1] self.videodevice.set(d) self.videodevice.trace('w', self.do_configure) # self.path = 'filmroller' if not exists(self.path): makedirs(self.path) # create gui: Frame.__init__(self, self.root) self.grid() self.x_canvas = Canvas(self, width=640, height=640, ) self.x_canvas.pack(side='top') self.x_canvas.bind('<Button-1>', self.do_change_rotation) Checkbutton(self, text='Invert', variable=self.invert).pack(side='left') Checkbutton(self, text='Gray', variable=self.grayscale).pack(side='left') Checkbutton(self, text='Auto', variable=self.autocontrast).pack(side='left') OptionMenu(self, self.videodevice, *dev_names, command=self.restart_video).pack(side='left') Button(self, text='First role', command=self.do_first_role).pack(side='left') Label(self, textvariable=self.filename).pack(side='left') Button(self, text='Next role', command=self.do_inc_role).pack(side='left') Button(self, text='Take!', command=self.do_single_shot).pack(side='right') #filemenu = Menu(self.menu) #self.menu.add_cascade(label=self.videodevice.get(), menu=filemenu, ) #for n in dev_names: # filemenu.add_command(label=n, ) #filemenu.add_separator() # start operation: self.do_first_role() self.do_start_video() def do_change_rotation(self, event): ' determine where the image was clicked and turn that to the top ' if event.x < 200: self.degree.set(-90) elif event.x > 640 - 200: self.degree.set(90) else: self.degree.set(0) def config_get(self, name, default): ' read a configuration entry, fallback to default if not already stored ' if not self.config.has_option('global', name): return default if isinstance(default, bool): return self.config.getboolean('global', name) else: return self.config.get('global', name) def do_configure(self, name, mode, cbname): ' change a configuration entry ' if cbname == 'w': value = getattr(self, name).get() self.config.set('global', name, str(value)) self.config.write(open('filmroller.conf', 'w')) def do_first_role(self, *args): ' jump back to first role ' self.role = 'aa' self.serial = 0 self.inc_picture() def inc_picture(self): ' increment the picture number, jump over existing files ' self.filename.set('{}/scanned.{}-{:04}.jpg'.format(self.path, self.role, self.serial, )) while exists(self.filename.get()): self.serial += 1 self.filename.set('{}/scanned.{}-{:04}.jpg'.format(self.path, self.role, self.serial, )) self.root.title('filmroller - ' + self.filename.get()) def do_inc_role(self, *args): ' increment to next role ' self.serial = 0 self.role = ascii_increment(self.role) self.inc_picture() def set_pauseimage(self): ' show pause image (during shot) ' self.image = fromfile('filmroller.pause.png') self.image.thumbnail((self.previewsize['size_x'], self.previewsize['size_y'], ), ) self.photo = PhotoImage(self.image) self.x_canvas.create_image(640/2, 640/2, image=self.photo) def do_stop_video(self, *args): ' stop video and release device ' if self.video is not None: self.video.stop() self.video.close() self.video = None def restart_video(self, *args): ' restart video (if device changes or hangs) ' self.do_stop_video() self.root.after(1, self.do_start_video) def do_start_video(self, *args): ' init video and start live view ' if self.video is None: self.video = Video_device(self.videodevice.get()) _, _, self.fourcc = self.video.get_format() caps = sorted(self.video.get_framesizes(self.fourcc), cmp=lambda a, b: cmp(a['size_x']*a['size_y'], b['size_x']*b['size_y'])) self.previewsize, self.highressize = caps[0], caps[-1] self.previewsize['size_x'], self.previewsize['size_y'] = self.video.set_format( self.previewsize['size_x'], self.previewsize['size_y'], 0, 'MJPEG') try: self.video.set_auto_white_balance(True) except: pass try: self.video.set_exposure_auto(True) except: pass try: self.video.set_focus_auto(True) except: pass self.video.create_buffers(30) self.video.queue_all_buffers() self.video.start() self.root.after(1, self.do_live_view) #self.x_canvas.config(width=640, height=480) #self.x_canvas.pack(side='top') self.degree.set(0) def do_live_view(self, *args): ' show single pic live view and ask tk to call us again later ' if self.video is not None: select((self.video, ), (), ()) data = self.video.read_and_queue() self.image = frombytes('RGB', (self.previewsize['size_x'], self.previewsize['size_y']), data) if self.invert.get(): self.image = invert(self.image) if self.grayscale.get(): self.image = grayscale(self.image) if self.autocontrast.get(): self.image = autocontrast(self.image) if self.equalize.get(): self.image = equalize(self.image) if self.solarize.get(): self.image = solarize(self.image) if self.degree.get(): self.image = self.image.rotate(self.degree.get()) self.photo = PhotoImage(self.image) self.x_canvas.create_image(640/2, 640/2, image=self.photo) self.root.after(3, self.do_live_view) def do_single_shot(self, *args): ' do a high res single shot and store it ' def _go(): self.video = Video_device(self.videodevice.get()) try: self.highressize['size_x'], self.highressize['size_y'] = self.video.set_format( self.highressize['size_x'], self.highressize['size_y'], 0, 'MJPEG') try: self.video.set_auto_white_balance(True) except: pass try: self.video.set_exposure_auto(True) except: pass try: self.video.set_focus_auto(True) except: pass self.video.create_buffers(7) self.video.queue_all_buffers() self.video.start() stop_time = time() + 3.0 # wait for auto while stop_time >= time(): select((self.video, ), (), ()) self.update_idletasks() data = self.video.read_and_queue() image = frombytes('RGB', (self.highressize['size_x'], self.highressize['size_y'], ), data) if self.invert.get(): image = invert(image) if self.grayscale.get(): image = grayscale(image) if self.autocontrast.get(): image = autocontrast(image) if self.equalize.get(): self.image = equalize(self.image) if self.solarize.get(): self.image = solarize(self.image) if self.degree.get(): image = image.rotate(self.degree.get()) image.save(self.filename.get()) self.inc_picture() self.root.bell() self.video.stop() finally: self.video.close() self.video = None self.root.after(1, self.do_start_video) self.do_stop_video() self.set_pauseimage() self.update_idletasks() self.root.after(1, _go)
class MainUI(Frame): """ Main UI window for draft """ def __init__(self, parent, draftgame): self.current_opponent_id = 0 self.user_pick_made = BooleanVar() self.user_pick_made.set(False) self.game = draftgame self.parent = parent Frame.__init__(self, parent) self.grid() self.__MainUI() self.draft_logic() def draft_logic(self): if self.game.draft_style == "Linear": self.linear_draft() elif self.game.draft_style == "Snake": self.snake_draft() FinalUI(self.parent, self.game) def linear_draft(self): while self.game.current_round <= self.game.number_of_rounds: if self.game.draft_position != self.game.current_position: self.opponent_pick_logic(self.current_opponent_id) self.current_opponent_id += 1 self.increment_position() else: self.user_pick_logic() self.increment_position() def snake_draft(self): while self.game.current_round <= self.game.number_of_rounds: if self.game.current_round % 2 != 0: if self.game.draft_position != self.game.current_position: self.opponent_pick_logic(self.current_opponent_id) self.current_opponent_id += 1 self.increment_position() else: self.user_pick_logic() self.increment_position() else: if self.game.draft_position != \ self.game.number_of_opponents \ - self.game.current_position + 2: self.opponent_pick_logic( self.game.number_of_opponents - self.current_opponent_id - 1 ) self.current_opponent_id += 1 self.increment_position() else: self.user_pick_logic() self.increment_position() def increment_position(self): self.game.current_position += 1 if self.game.current_position > self.game.number_of_opponents + 1: self.game.current_round += 1 self.game.current_position = 1 self.current_opponent_id = 0 self.__MainUI() def user_pick_logic(self): self.user_pick_made.set(False) while not self.user_pick_made.get(): self.wait_variable(name=self.user_pick_made) def opponent_pick_logic(self, opponent_id): pick_made = False pick = tkSimpleDialog.askstring( "Opponent's pick", "Who did your opponent pick?\nCurrent Pick: Round {0}: Pick {1}" .format(self.game.current_round, self.game.current_position)) while not pick_made: try: if utils.get_player_position(pick, self.game.cursor) is not None: position = utils.get_player_position(pick, self.game.cursor).rstrip('0123456789 ').upper() if utils.get_player_from_table(pick, position, self.game.cursor) is not None: utils.remove_player_from_possible_players(pick, self.game.connection, self.game.cursor) opponent = [opponent for opponent in self.game.opponents if opponent_id == opponent.id][0] opponent.team.append(pick) pick_made = True else: pick = tkSimpleDialog.askstring( "Opponent's pick", "NOT A VALID PICK: please select again\nCurrent Pick: Round {0}: Pick {1}" .format(self.game.current_round, self.game.current_position)) else: pick = tkSimpleDialog.askstring( "Opponent's pick", "NOT A VALID PICK: please select again\nCurrent Pick: Round {0}: Pick {1}" .format(self.game.current_round, self.game.current_position)) except AttributeError: tkMessageBox.showinfo("Error", "Opponent must pick a valid player") pick = tkSimpleDialog.askstring( "Opponent's pick", "NOT A VALID PICK: please select again\nCurrent Pick: Round {0}: Pick {1}" .format(self.game.current_round, self.game.current_position)) def __MainUI(self): self.parent.title("Fantasy Football Helper") for widget in self.parent.winfo_children(): widget.destroy() self.__draw_round_label(self.parent) self.__draw_recommended_list(self.parent) self.__draw_valuable_list(self.parent) self.__draw_current_team(self.parent) self.__draw_team_requirements(self.parent) self.__draw_current_choice(self.parent) self.__draw_opponent_teams(self.parent) def __draw_round_label(self, parent): Label(parent, text="Round{0}: Pick{1}".format(self.game.current_round, self.game.current_position)).grid(row=0) def __draw_current_choice(self, parent): choice = IntVar() other_player = StringVar() recommended = self.game.most_recommended_player_remaining() valuable = self.game.get_best_player_remaining() recommended_button = Radiobutton(parent, text=recommended, variable=choice, value=1) valuable_button = Radiobutton(parent, text=valuable, variable=choice, value=2) other_button = Radiobutton(parent, text="", variable=choice, takefocus=0, value=3) other_text = Entry(parent, textvariable=other_player) def text_focus(event): other_button.select() other_text.bind("<Button-1>", text_focus) def pick_player(): decision = choice.get() if decision == 1: player = self.game.most_recommended_player_remaining() self.game.add_player_to_team(player) utils.remove_player_from_possible_players( player, self.game.connection, self.game.cursor) self.user_pick_made.set(True) elif decision == 2: player = self.game.get_best_player_remaining() self.game.add_player_to_team(player) utils.remove_player_from_possible_players( player, self.game.connection, self.game.cursor) self.user_pick_made.set(True) elif decision == 3: player = other_player.get() try: self.game.add_player_to_team(player) utils.remove_player_from_possible_players( player, self.game.connection, self.game.cursor) self.user_pick_made.set(True) except: tkMessageBox.showinfo("Error", "Can't add that player to team, try again.") self.user_pick_logic() else: tkMessageBox.showinfo("No Selection", "Please make a selection") self.user_pick_logic() def pick_player_button(event): pick_player() Label(parent, text="Recommended Player").grid(sticky="w", row=1) recommended_button.grid(sticky="w", row=1, column=1, columnspan=2) Label(parent, text="Most Valuable Player").grid(sticky="w", row=2) valuable_button.grid(sticky="w", row=2, column=1, columnspan=2) Label(parent, text="Choose other Player").grid(sticky="w", row=3) other_button.grid(sticky="w", row=3, column=1) other_text.grid(row=3, column=2, sticky="w", padx=5) pick_button = Button(parent, text="Pick", command=pick_player).grid( row=4, columnspan=3, sticky="ne", padx=5) self.parent.bind("<Return>", pick_player_button) def __draw_recommended_list(self, parent): recommended_list = self.game.get_list_recommended_players("10") recommended_listbox = Text(parent, height=10, width=35) Label(parent, text="List of Recommended Players").grid(row=1, column=3) recommended_listbox.grid(row=2, column=3, rowspan=4, sticky="n") for player in recommended_list: index = str(recommended_list.index(player) + 1) recommended_listbox.insert("end", "{0:>2}:{1:<20} {2} {3}\n".format(index, player[0], player[2], format(player[1], '.0f')) ) recommended_listbox.config(state="disabled") def __draw_valuable_list(self, parent): valuable_list = self.game.get_list_of_best_players("10") valuable_listbox = Text(parent, height=10, width=35) Label(parent, text="List of Most Valuable Players").grid(row=1, column=4) valuable_listbox.grid(row=2, column=4, rowspan=4, sticky="n", padx=10) for player in valuable_list: index = str(valuable_list.index(player) + 1) valuable_listbox.insert("end", "{0:>2}:{1:<20} {2} {3}\n".format(index, player[0], player[2], format(player[1], '.0f')) ) valuable_listbox.config(state="disabled") def __draw_team_requirements(self, parent): requirements = self.game.check_current_team_needs() requirement_list = [] for key in requirements.keys(): # key_string = "%d%s" % (requirements[key], key) requirement_list.append("{0}{1}".format(requirements[key], key)) Label(parent, text="Still Need: " + ", ".join(requirement_list)).grid( row=5, columnspan=3, sticky="w") def __draw_current_team(self, parent): current_team = self.game.current_team team_list = [] for key in current_team.keys(): # player_string = "%s %s" % (key, current_team[key]) team_list.append("{0}: {1}".format(key, current_team[key])) current_team_string = (", ".join(team_list[0:len(team_list) / 2 + 1]) + "\n" + ", ".join(team_list[len(team_list) / 2 + 1:])) Label(parent, text="Current Team: ").grid( row=6) Label(parent, text=current_team_string).grid( row=6, column=1, columnspan=4, pady=10) def __draw_opponent_teams(self, parent): opponents = self.game.opponents for opponent in opponents: Label(parent, text="Opponent{0}'s Team: ".format(opponent.id + 1)).grid( row=7 + opponent.id) Label(parent, text=str(opponent.team)).grid( row=7 + opponent.id, column=1, columnspan=4)
def main(argv): if len(argv) == 1: root = Tk() root.title("Randominions 4") mapfilevar = StringVar() outfilevar = StringVar() outfilevar.set("newrandommap.map") modfilevar = StringVar() lvl1thronevar = IntVar() lvl1thronevar.set(0) lvl2thronevar = IntVar() lvl2thronevar.set(0) lvl3thronevar = IntVar() lvl3thronevar.set(0) landstartvar = IntVar() landstartvar.set(0) waterstartvar = IntVar() waterstartvar.set(0) coaststartvar = IntVar() coaststartvar.set(0) foreststartvar = IntVar() foreststartvar.set(0) swampstartvar = IntVar() swampstartvar.set(0) cavestartvar = IntVar() cavestartvar.set(0) indystrengthvar = IntVar() indystrengthvar.set(100) rarechancevar = IntVar() rarechancevar.set(10) magepowervar = IntVar() magepowervar.set(2) allowsacred = BooleanVar() allowsacred.set(False) Label(root, text="Map:").grid(row=0, sticky=E) Entry(root, width=50, textvariable=mapfilevar).grid(row=0, column=1) Label(root, text="Output map:").grid(row=4, sticky=E) Entry(root, width=50, textvariable=outfilevar).grid(row=4, column=1) Label(root, text="Nation mod file:").grid(row=5, sticky=E) Entry(root, width=50, textvariable=modfilevar).grid(row=5, column=1) Label(root, text="Rare indy chance(%):").grid(row=6, sticky=E) Entry(root, width=5, textvariable=rarechancevar).grid(row=6, column=1, sticky=W) Label(root, text="Indy strength(%):").grid(row=7, sticky=E) Entry(root, width=5, textvariable=indystrengthvar).grid(row=7, column=1, sticky=W) Label(root, text="Max nation mage power:").grid(row=8, sticky=E) Entry(root, width=5, textvariable=magepowervar).grid(row=8, column=1, sticky=W) Label(root, text="Allow sacred units:").grid(row=9, sticky=E) Checkbutton(root, variable=allowsacred).grid(row=9, column=1, sticky=W) Label(root, text="Level 1 thrones:").grid(row=0, column=3, sticky=E) Entry(root, width=3, textvariable=lvl1thronevar).grid(row=0, column=4) Label(root, text="Level 2 thrones:").grid(row=1, column=3, sticky=E) Entry(root, width=3, textvariable=lvl2thronevar).grid(row=1, column=4) Label(root, text="Level 3 thrones:").grid(row=2, column=3, sticky=E) Entry(root, width=3, textvariable=lvl3thronevar).grid(row=2, column=4) Label(root, text="Land nations:").grid(row=3, column=3, sticky=E) Entry(root, width=3, textvariable=landstartvar).grid(row=3, column=4) Label(root, text="Water nations:").grid(row=4, column=3, sticky=E) Entry(root, width=3, textvariable=waterstartvar).grid(row=4, column=4) Label(root, text="Coastal starts:").grid(row=5, column=3, sticky=E) Entry(root, width=3, textvariable=coaststartvar).grid(row=5, column=4) Label(root, text="Forest starts:").grid(row=6, column=3, sticky=E) Entry(root, width=3, textvariable=foreststartvar).grid(row=6, column=4) Label(root, text="Swamp starts:").grid(row=7, column=3, sticky=E) Entry(root, width=3, textvariable=swampstartvar).grid(row=7, column=4) Label(root, text="Cave starts:").grid(row=8, column=3, sticky=E) Entry(root, width=3, textvariable=cavestartvar).grid(row=8, column=4) Label(root, text="Indies:").grid(row=1, sticky=E) indylist = Listbox(root, width=50, height=4) indylist.grid(row=1, column=1, rowspan=3) Button(root, width=13, text="Choose Map", command=lambda : mapfilevar.set(askopenfilename(filetypes=[('Dominions 4 map files', '.map')]))).grid(row=0, column=2, sticky=W) Button(root, width=13, text="Choose Mod", command=lambda : modfilevar.set(askopenfilename(filetypes=[('Dominions 4 mod file', '.dm')]))).grid(row=5, column=2, sticky=W) Button(root, width=13, text="Add indies", command=lambda : indylist.insert(END,askopenfilename(filetypes=[('JSON files', '.json'), ('Domions 4 mod files', '.dm')]))).grid(row=1, column=2, sticky=W) Button(root, width=13, text="Remove selected", command=lambda : indylist.delete(ANCHOR)).grid(row=2, column=2, sticky=W) Button(root, width=10, text="Quit", command=root.destroy).grid(row=10, column=0) Button(root, width=10, text="Generate!", \ command=lambda : runGenerator(mapfilevar.get(), indylist.get(0, END), outfilevar.get(), landstartvar.get(), waterstartvar.get(), \ coaststartvar.get(), foreststartvar.get(), swampstartvar.get(), cavestartvar.get(), lvl1thronevar.get(), \ lvl2thronevar.get(), lvl3thronevar.get(), rarechancevar.get(), indystrengthvar.get(), modfilevar.get(), magepowervar.get(), allowsacred.get())).grid(row=10, column=3) root.mainloop() elif len(argv) < 15: print "Usage: randominions4 mapfile targetmapfile indydefinition landnations waternations coaststarts foreststarts swampstarts cavestarts lvl1thrones lvl2thrones lvl3thrones rarechance indystrength" else: mapfile = argv[1] indyfile = argv[3] targetfile = argv[2] landcount = int(argv[4]) watercount = int(argv[5]) coaststarts = int(argv[6]) foreststarts = int(argv[7]) swampstarts = int(argv[8]) cavestarts = int(argv[9]) lvl1thrones = int(argv[10]) lvl2thrones = int(argv[11]) lvl3thrones = int(argv[12]) rarechance = int(argv[13]) strength = int(argv[14]) runGenerator(mapfile, [indyfile], targetfile, landcount, watercount, coaststarts, foreststarts, swampstarts, cavestarts, lvl1thrones, lvl2thrones, lvl3thrones, rarechance, strength, None, None, None)
class Tool_Path_Generator: def __init__(self, top=None): '''This class configures and populates the toplevel window. top is the toplevel containing window.''' _bgcolor = '#e6e6e6' # X11 color: 'gray85' _fgcolor = '#000000' # X11 color: 'black' font11 = "-size 15 -weight normal -slant roman " \ "-underline 0 -overstrike 0" self.axial_length = DoubleVar() self.printbed_diameter = DoubleVar() self.final_diameter = DoubleVar() self.filament_width_og = DoubleVar() self.helix_angle = DoubleVar() self.smear_factor = DoubleVar() self.flow_rate = DoubleVar() self.uv_offset = DoubleVar() self.use_strong_pattern = BooleanVar() self.axial_length.set(200.0) self.printbed_diameter.set(10.0) self.final_diameter.set(15.0) self.filament_width_og.set(0.41) self.helix_angle.set(45.0) self.smear_factor.set(100.0) self.flow_rate.set(0.0015) self.uv_offset.set(32.5) self.use_strong_pattern.set(True) top.geometry("700x550") top.title("SkelePrint Tool Path Generator") top.configure(background="#e6e6e6") top.configure(highlightbackground="#e6e6e6") top.configure(highlightcolor="black") self.Label7 = Label(top) self.Label7.grid(row=0, column=0, sticky=W) self.Label7.configure(background="#e6e6e6") self.Label7.configure(font=font11) self.Label7.configure(foreground="#000000") self.Label7.configure(text='''SkelePrint Tool Path Generator''') self.Labelframe1 = LabelFrame(top) self.Labelframe1.grid(row=1, column=0, sticky=N+S) self.Labelframe1.configure(relief=GROOVE) self.Labelframe1.configure(foreground="black") self.Labelframe1.configure(text='''Dimensions''') self.Labelframe1.configure(background="#e6e6e6") self.Labelframe1.configure(highlightbackground="#e6e6e6") self.Labelframe1.configure(highlightcolor="black") self.axial_length_entry = Entry(self.Labelframe1) self.axial_length_entry.grid(row=0, column=1) self.axial_length_entry.configure(background="white") self.axial_length_entry.configure(font="TkFixedFont") self.axial_length_entry.configure(foreground="#000000") self.axial_length_entry.configure(highlightbackground="#e6e6e6") self.axial_length_entry.configure(highlightcolor="black") self.axial_length_entry.configure(insertbackground="black") self.axial_length_entry.configure(selectbackground="#c4c4c4") self.axial_length_entry.configure(selectforeground="black") self.axial_length_entry.configure(textvariable=self.axial_length) self.Label1 = Label(self.Labelframe1) self.Label1.grid(row=0, column=0, sticky=E) self.Label1.configure(activebackground="#e6e6e6") self.Label1.configure(activeforeground="black") self.Label1.configure(background="#e6e6e6") self.Label1.configure(foreground="#000000") self.Label1.configure(highlightbackground="#e6e6e6") self.Label1.configure(highlightcolor="black") self.Label1.configure(text='''Axial Length''') self.Label2 = Label(self.Labelframe1) self.Label2.grid(row=0, column=2, sticky=W) self.Label2.configure(activebackground="#e6e6e6") self.Label2.configure(activeforeground="black") self.Label2.configure(background="#e6e6e6") self.Label2.configure(disabledforeground="#e6e6e6") self.Label2.configure(foreground="#000000") self.Label2.configure(highlightbackground="#e6e6e6") self.Label2.configure(highlightcolor="black") self.Label2.configure(text='''mm''') self.Label3 = Label(self.Labelframe1) self.Label3.grid(row=1, column=0, sticky=E) self.Label3.configure(activebackground="#e6e6e6") self.Label3.configure(activeforeground="black") self.Label3.configure(background="#e6e6e6") self.Label3.configure(foreground="#000000") self.Label3.configure(highlightbackground="#e6e6e6") self.Label3.configure(highlightcolor="black") self.Label3.configure(text='''Printbed Diameter''') self.Entry2 = Entry(self.Labelframe1) self.Entry2.grid(row=1, column=1) self.Entry2.configure(background="white") self.Entry2.configure(font="TkFixedFont") self.Entry2.configure(foreground="#000000") self.Entry2.configure(highlightbackground="#e6e6e6") self.Entry2.configure(highlightcolor="black") self.Entry2.configure(insertbackground="black") self.Entry2.configure(selectbackground="#c4c4c4") self.Entry2.configure(selectforeground="black") self.Entry2.configure(textvariable=self.printbed_diameter) self.Label4 = Label(self.Labelframe1) self.Label4.grid(row=1, column=2, sticky=W) self.Label4.configure(activebackground="#e6e6e6") self.Label4.configure(activeforeground="black") self.Label4.configure(background="#e6e6e6") self.Label4.configure(foreground="#000000") self.Label4.configure(highlightbackground="#e6e6e6") self.Label4.configure(highlightcolor="black") self.Label4.configure(text='''mm''') self.Label5 = Label(self.Labelframe1) self.Label5.grid(row=2, column=0, sticky=E) self.Label5.configure(activebackground="#e6e6e6") self.Label5.configure(activeforeground="black") self.Label5.configure(background="#e6e6e6") self.Label5.configure(foreground="#000000") self.Label5.configure(highlightbackground="#e6e6e6") self.Label5.configure(highlightcolor="black") self.Label5.configure(text='''Final Print Diameter''') self.final_diameter_entry = Entry(self.Labelframe1) self.final_diameter_entry.grid(row=2, column=1) self.final_diameter_entry.configure(background="white") self.final_diameter_entry.configure(font="TkFixedFont") self.final_diameter_entry.configure(foreground="#000000") self.final_diameter_entry.configure(highlightbackground="#e6e6e6") self.final_diameter_entry.configure(highlightcolor="black") self.final_diameter_entry.configure(insertbackground="black") self.final_diameter_entry.configure(selectbackground="#c4c4c4") self.final_diameter_entry.configure(selectforeground="black") self.final_diameter_entry.configure(textvariable=self.final_diameter) self.Label6 = Label(self.Labelframe1) self.Label6.grid(row=2, column=2, sticky=W) self.Label6.configure(activebackground="#e6e6e6") self.Label6.configure(activeforeground="black") self.Label6.configure(background="#e6e6e6") self.Label6.configure(foreground="#000000") self.Label6.configure(highlightbackground="#e6e6e6") self.Label6.configure(highlightcolor="black") self.Label6.configure(text='''mm''') self.Entry4 = Entry(self.Labelframe1) self.Entry4.grid(row=3, column=1) self.Entry4.configure(background="white") self.Entry4.configure(font="TkFixedFont") self.Entry4.configure(foreground="#000000") self.Entry4.configure(highlightbackground="#e6e6e6") self.Entry4.configure(highlightcolor="black") self.Entry4.configure(insertbackground="black") self.Entry4.configure(selectbackground="#c4c4c4") self.Entry4.configure(selectforeground="black") self.Entry4.configure(textvariable=self.filament_width_og) self.Label7 = Label(self.Labelframe1) self.Label7.grid(row=3, column=2, sticky=W) self.Label7.configure(activebackground="#e6e6e6") self.Label7.configure(activeforeground="black") self.Label7.configure(background="#e6e6e6") self.Label7.configure(foreground="#000000") self.Label7.configure(highlightbackground="#e6e6e6") self.Label7.configure(highlightcolor="black") self.Label7.configure(text='''mm''') self.Label8 = Label(self.Labelframe1) self.Label8.grid(row=3, column=0, sticky=E) self.Label8.configure(activebackground="#e6e6e6") self.Label8.configure(activeforeground="black") self.Label8.configure(background="#e6e6e6") self.Label8.configure(foreground="#000000") self.Label8.configure(highlightbackground="#e6e6e6") self.Label8.configure(highlightcolor="black") self.Label8.configure(text='''Filament Width''') self.tip = Label(self.Labelframe1, width=300, height=300) __location__ = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__))) img = Image.open(os.path.join(__location__, 'dimensions.png')) one = ImageTk.PhotoImage(img) self.tip = Label(self.Labelframe1, image=one) self.tip.image = one self.tip.configure(background="#e6e6e6") self.tip.grid(row=4, columnspan=3) self.Labelframe2 = LabelFrame(top) self.Labelframe2.grid(row=1, column=1, sticky=N+S) self.Labelframe2.configure(relief=GROOVE) self.Labelframe2.configure(foreground="black") self.Labelframe2.configure(text='''Print Properties''') self.Labelframe2.configure(background="#e6e6e6") self.Labelframe2.configure(highlightbackground="#e6e6e6") self.Labelframe2.configure(highlightcolor="black") self.Label9 = Label(self.Labelframe2) self.Label9.grid(row=0, column=0, sticky=E) self.Label9.configure(activebackground="#e6e6e6") self.Label9.configure(activeforeground="black") self.Label9.configure(background="#e6e6e6") self.Label9.configure(foreground="#000000") self.Label9.configure(highlightbackground="#e6e6e6") self.Label9.configure(highlightcolor="black") self.Label9.configure(text='''Helix Angle''') self.Entry5 = Entry(self.Labelframe2) self.Entry5.grid(row=0, column=1) self.Entry5.configure(background="white") self.Entry5.configure(font="TkFixedFont") self.Entry5.configure(foreground="#000000") self.Entry5.configure(highlightbackground="#e6e6e6") self.Entry5.configure(highlightcolor="black") self.Entry5.configure(insertbackground="black") self.Entry5.configure(selectbackground="#c4c4c4") self.Entry5.configure(selectforeground="black") self.Entry5.configure(textvariable=self.helix_angle) self.Label10 = Label(self.Labelframe2) self.Label10.grid(row=0, column=2, sticky=W) self.Label10.configure(activebackground="#e6e6e6") self.Label10.configure(activeforeground="black") self.Label10.configure(background="#e6e6e6") self.Label10.configure(foreground="#000000") self.Label10.configure(highlightbackground="#e6e6e6") self.Label10.configure(highlightcolor="black") self.Label10.configure(text='''degrees [0 - 90]''') self.strong_targeter_button = Radiobutton(self.Labelframe2) self.strong_targeter_button.grid(row=1, column=0, sticky=E) self.strong_targeter_button.configure(variable=self.use_strong_pattern) self.strong_targeter_button.configure(value=True) self.strong_targeter_button.configure(activebackground="#e6e6e6") self.strong_targeter_button.configure(activeforeground="black") self.strong_targeter_button.configure(background="#e6e6e6") self.strong_targeter_button.configure(foreground="#000000") self.strong_targeter_button.configure(highlightbackground="#e6e6e6") self.strong_targeter_button.configure(highlightcolor="black") self.strong_targeter_label = Label(self.Labelframe2) self.strong_targeter_label.grid(row=1, column=1, sticky=W) self.strong_targeter_label.configure(activebackground="#e6e6e6") self.strong_targeter_label.configure(activeforeground="black") self.strong_targeter_label.configure(background="#e6e6e6") self.strong_targeter_label.configure(foreground="#000000") self.strong_targeter_label.configure(highlightbackground="#e6e6e6") self.strong_targeter_label.configure(highlightcolor="black") self.strong_targeter_label.configure(text="Strong angle pattern") self.default_targeter_button = Radiobutton(self.Labelframe2) self.default_targeter_button.grid(row=2, column=0, sticky=E) self.default_targeter_button.configure(activebackground="#e6e6e6") self.default_targeter_button.configure(activeforeground="black") self.default_targeter_button.configure(background="#e6e6e6") self.default_targeter_button.configure(foreground="#000000") self.default_targeter_button.configure(highlightbackground="#e6e6e6") self.default_targeter_button.configure(highlightcolor="black") self.default_targeter_button.configure( variable=self.use_strong_pattern) self.default_targeter_button.configure(value=False) self.default_targeter_label = Label(self.Labelframe2) self.default_targeter_label.grid(row=2, column=1, sticky=W) self.default_targeter_label.configure(activebackground="#e6e6e6") self.default_targeter_label.configure(activeforeground="black") self.default_targeter_label.configure(background="#e6e6e6") self.default_targeter_label.configure(foreground="#000000") self.default_targeter_label.configure(highlightbackground="#e6e6e6") self.default_targeter_label.configure(highlightcolor="black") self.default_targeter_label.configure(text="Default angle pattern") self.Scale1 = Scale(self.Labelframe2) self.Scale1.grid(row=5, column=1, columnspan=2, sticky=S+W) self.Scale1.configure(activebackground="#e6e6e6") self.Scale1.configure(background="#e6e6e6") self.Scale1.configure(font="TkTextFont") self.Scale1.configure(foreground="#000000") self.Scale1.configure(from_="5.0") self.Scale1.configure(highlightbackground="#d9d9d9") self.Scale1.configure(highlightcolor="black") self.Scale1.configure(length="150") self.Scale1.configure(orient="horizontal") self.Scale1.configure(resolution="5.0") self.Scale1.configure(troughcolor="#d9d9d9") self.Scale1.configure(variable=self.smear_factor) self.Label8 = Label(self.Labelframe2) self.Label8.grid(row=3, column=0, sticky=E) self.Label8.configure(background="#e6e6e6") self.Label8.configure(foreground="#000000") self.Label8.configure(text='''Flow rate''') self.Entry6 = Entry(self.Labelframe2) self.Entry6.grid(row=3, column=1) self.Entry6.configure(background="white") self.Entry6.configure(font="TkFixedFont") self.Entry6.configure(foreground="#000000") self.Entry6.configure(highlightbackground="#e6e6e6") self.Entry6.configure(highlightcolor="black") self.Entry6.configure(insertbackground="black") self.Entry6.configure(selectbackground="#c4c4c4") self.Entry6.configure(selectforeground="black") self.Entry6.configure(textvariable=self.flow_rate) self.Label12 = Label(self.Labelframe2) self.Label12.grid(row=3, column=2, sticky=W) self.Label12.configure(activebackground="#e6e6e6") self.Label12.configure(activeforeground="black") self.Label12.configure(background="#e6e6e6") self.Label12.configure(foreground="#000000") self.Label12.configure(highlightbackground="#d9d9d9") self.Label12.configure(highlightcolor="black") self.Label12.configure(text='''cm^3 / s''') self.uv_label = Label(self.Labelframe2) self.uv_label.grid(row=4, column=0, sticky=E) self.uv_label.configure(activebackground="#e6e6e6") self.uv_label.configure(activeforeground="black") self.uv_label.configure(background="#e6e6e6") self.uv_label.configure(foreground="#000000") self.uv_label.configure(highlightbackground="#d9d9d9") self.uv_label.configure(highlightcolor="black") self.uv_label.configure(text="UV Distance") self.uv_entry = Entry(self.Labelframe2) self.uv_entry.grid(row=4, column=1) self.uv_entry.configure(background="white") self.uv_entry.configure(font="TkFixedFont") self.uv_entry.configure(foreground="#000000") self.uv_entry.configure(highlightbackground="#e6e6e6") self.uv_entry.configure(highlightcolor="black") self.uv_entry.configure(insertbackground="black") self.uv_entry.configure(selectbackground="#c4c4c4") self.uv_entry.configure(selectforeground="black") self.uv_entry.configure(textvariable=self.uv_offset) self.uv_label_2 = Label(self.Labelframe2) self.uv_label_2.grid(row=4, column=2, sticky=W) self.uv_label_2.configure(activebackground="#e6e6e6") self.uv_label_2.configure(activeforeground="black") self.uv_label_2.configure(background="#e6e6e6") self.uv_label_2.configure(foreground="#000000") self.uv_label_2.configure(highlightbackground="#d9d9d9") self.uv_label_2.configure(highlightcolor="black") self.uv_label_2.configure(text='''mm''') self.Label11 = Label(self.Labelframe2) self.Label11.grid(row=5, column=0, sticky=S+E) self.Label11.configure(activebackground="#e6e6e6") self.Label11.configure(activeforeground="black") self.Label11.configure(background="#e6e6e6") self.Label11.configure(foreground="#000000") self.Label11.configure(highlightbackground="#d9d9d9") self.Label11.configure(highlightcolor="black") self.Label11.configure(text='''Layer Height %''') self.Label13 = Label(self.Labelframe2) self.Label13.grid(row=6, columnspan=3) self.Label13.configure(activebackground="#f9f9f9") self.Label13.configure(activeforeground="black") self.Label13.configure(background="#e6e6e6") self.Label13.configure(foreground="#000000") self.Label13.configure(highlightbackground="#d9d9d9") self.Label13.configure(highlightcolor="black") self.Label13.configure(text='''caution: layer height % is experimental default = 100% (ie. layer height = filament width)''') self.Message1 = Message(self.Labelframe2) self.Message1.grid(row=8, columnspan=3) self.Message1.configure(anchor=N) self.Message1.configure(background="#e6e6e6") self.Message1.configure(foreground="#000000") self.Message1.configure(highlightbackground="#e6e6e6") self.Message1.configure(highlightcolor="black") self.Message1.configure(text='''Helix Angle Conditions: If the angle is > 90, it will be set to 90 degrees If angle is < 0, it will be set to 0 degrees If angle = 0, the layer will consist of a single helix printed as close \ together as possible If angle = 90, the layer will consist of many straight lines''') self.tip2 = Label(self.Labelframe2, width=300, height=91) img2 = Image.open(os.path.join(__location__, 'theta.jpg')) two = ImageTk.PhotoImage(img2) self.tip2 = Label(self.Labelframe2, image=two) self.tip2.image = two self.tip2.configure(background="#e6e6e6") self.tip2.grid(row=7, columnspan=3) self.Label8 = Label(top) self.Label8.grid(row=5, columnspan=2) self.Label8.configure(background="#e6e6e6") self.Label8.configure(foreground="#000000") self.Label8.configure(text='''G Code file will be saved on your Desktop under: "gcode/timestamp_skeleprint_gcode.gcode"''') self.Button1 = Button(top) self.Button1.grid(row=2, columnspan=2) self.Button1.configure(activebackground="#e6e6e6") self.Button1.configure(activeforeground="#e6e6e6") self.Button1.configure(background="#e6e6e6") self.Button1.configure(command=lambda: tpg_gui_support.tpg( self.axial_length.get(), self.filament_width_og.get(), self.printbed_diameter.get(), self.final_diameter.get(), self.helix_angle.get(), self.smear_factor.get(), self.flow_rate.get(), self.uv_offset.get(), self.use_strong_pattern.get())) self.Button1.configure(foreground="#000000") self.Button1.configure(highlightbackground="#e6e6e6") self.Button1.configure(highlightcolor="black") self.Button1.configure(relief=RAISED) self.Button1.configure(text='''Generate G Code''') self.menubar = Menu(top, font="TkMenuFont", bg=_bgcolor, fg=_fgcolor) top.configure(menu=self.menubar)
class CreateMask(Frame): def __init__(self, parent, filename=None, dirname=None, mask4d=False, obj_return_value=None): Frame.__init__(self, parent) self.parent = parent self.obj_return_value = obj_return_value if dirname is None: self.dirname = '' else: self.dirname = dirname if filename is None or not os.path.isfile(filename): if dirname is not None: filename = tkFileDialog.askopenfilename(initialdir=dirname) else: filename = tkFileDialog.askopenfilename() if not os.path.isfile(filename): parent.destroy() return self.readImage(filename) _, _, filename_mask = create_mask.set_filenames(filename) self.filename_mask = filename_mask + '.nii.gz' if mask4d: if len(self.shape) > 3: self.mask_base = np.zeros(self.shape, dtype=np.int8) self.mask = self.mask_base[:, :, :, 0] self.mask4d = True else: self.mask = np.zeros(self.shape[:3], dtype=np.int8) self.mask4d = False self.volume = 0 self.initUI() self.modifyUI() self.drawSlice() def initUI(self): self.frame_bottom = Frame(self) self.frame_main = Frame(self) def modifyUI(self): frame_bottom = self.frame_bottom frame_main = self.frame_main self.sliceView = [ ImshowMplCanvas(frame_main) for k in range(self.shape[2]) ] self.sliceSpin = [ MySpinBox(frame_main, k) for k in range(self.shape[2]) ] #Layout self.parent.title('CreateMask') max_spin = 0 if self.mask4d: max_spin = self.shape[3] - 1 self.spin_volume = Spinbox(frame_bottom, from_=0, to=max_spin, increment=1, command=self.change_volume, width=8) self.reset_box(self.spin_volume, 0) buttonMask = Button(frame_bottom, text='B0 from Bval...', command=self.createBaseImage) buttonMaskCreate = Button(frame_bottom, text='Create', command=self.createMaskAll) buttonSave = Button(frame_bottom, text='Save', command=self.saveMask) self.drawmask = BooleanVar() buttonDrawMask = Checkbutton(frame_bottom, text='Draw Mask', variable=self.drawmask, command=self.drawSlice) num_col = 3 num_row = 6 for col in range(self.shape[2] / num_row): for k in range(num_row): ind = col * num_row + k if ind >= self.shape[2]: break self.sliceView[ind].get_tk_widget().grid(row=k, column=col * num_col, sticky=NSEW) self.sliceSpin[ind].grid(row=k, column=col * num_col + 1) self.frame_main.grid_columnconfigure(col * num_col, weight=1) for k in range(num_row): self.frame_main.grid_rowconfigure(k, weight=1) self.spin_volume.grid(row=0, column=0) buttonMask.grid(row=0, column=1) buttonMaskCreate.grid(row=0, column=2) buttonSave.grid(row=0, column=3) buttonDrawMask.grid(row=0, column=5) frame_bottom.pack(side=BOTTOM) frame_main.pack(fill=BOTH, expand=TRUE) self.pack(fill=BOTH, expand=True) def change_volume(self): if not self.mask4d: return self.volume = int(self.spin_volume.get()) self.data = self.data_base[:, :, :, self.volume] self.mask = self.mask_base[:, :, :, self.volume] self.drawSlice() def saveMask(self): print 'save mask to %s' % self.filename_mask if self.mask4d: img_out = nib.Nifti1Image(self.mask_base, self.img.get_affine(), self.img.get_header()) else: img_out = nib.Nifti1Image(self.mask, self.img.get_affine(), self.img.get_header()) nib.save(img_out, os.path.join(self.dirname, self.filename_mask)) if self.obj_return_value is not None: self.obj_return_value.delete(0, len(self.obj_return_value.get())) self.obj_return_value.insert(0, os.path.basename(self.filename_mask)) def readImage(self, filename): self.filename = filename self.img = nib.load(filename) self.shape = self.img.shape self.data_base = self.img.get_data() if len(self.data_base.shape) > 3: for f in range(self.data_base.shape[3]): for z in range(self.data_base.shape[2]): self.data_base[:, :, z, f] = ndimage.gaussian_filter( self.data_base[:, :, z, f], sigma=0.5) self.data = self.data_base[:, :, :, 0] else: for z in range(self.data_base.shape[2]): self.data_base[:, :, z] = ndimage.gaussian_filter( self.data_base[:, :, z], sigma=0.5) self.data = self.data_base def createBaseImage(self): bvalFilename = tkFileDialog.askopenfilename() if bvalFilename: b0frames = parameter.get_b0_from_bval(bvalFilename) print self.filename, b0frames filename, filename_fltd, filename_mask = create_mask.set_filenames( self.filename) create_mask.make_base_image(filename, filename_fltd + '.nii.gz', b0frames) self.filename_mask = filename_mask + '.nii.gz' self.readImage(filename_fltd + '.nii.gz') self.drawSlice() def setSpinBoxConnect(self): for k in range(self.shape[2]): #self.sliceSpin[k].valueChanged.connect(lambda: self.createMaskSlice(k)) #self.sliceSpin[k].configure(command=lambda:self.createMaskSlice(k, self.sliceSpin[k])) self.sliceSpin[k].configure(command=functools.partial( self.createMaskSlice, k, self.sliceSpin[k])) def drawSlice(self): for k in range(self.shape[2]): self.sliceView[k].drawData(self.data[:, :, k], self.mask[:, :, k], self.drawmask.get()) def reset_box(self, box, text): box.delete(0, len(box.get())) box.insert(0, text) def createMaskSlice(self, k, value=None): self.mask[:, :, k] = 0 if value is None: value_i = int(self.sliceSpin[k].get()) else: value_i = int(value.get()) #create_mask.mask_from_threshold(self.com_x[k], self.com_y[k], self.sliceSpin[k].value(), self.data, self.mask, k) create_mask.mask_from_threshold(self.com_x[k], self.com_y[k], value_i, self.data, self.mask, k) self.sliceView[k].drawData(self.data[:, :, k], self.mask[:, :, k], self.drawmask.get()) def createMaskAll(self): self.drawmask.set(True) hdr = self.img.get_header() zooms = hdr.get_zooms() shape = self.shape self.com_x, self.com_y, roi_x, roi_y = create_mask.calculate_com( self.data, zooms) for k in range(shape[2]): dat_subflt = self.data[roi_x[k][0]:roi_x[k][1], roi_y[k][0]:roi_y[k][1], k].flatten() #threshold = np.mean(dat_subflt) threshold = np.mean(dat_subflt) + np.std(dat_subflt) self.reset_box(self.sliceSpin[k], int(threshold)) self.createMaskSlice(k) #create_mask.mask_from_threshold(self.com_x[k], self.com_y[k], threshold, self.data, self.mask, k) #self.drawSlice() self.setSpinBoxConnect()
class MenuBar(Menu): def __init__(self, master, visible=True): self.root = master Menu.__init__(self, master.root) # "ticked" menu options self.sc3_plugins = BooleanVar() self.sc3_plugins.set(SC3_PLUGINS) self.cpu_usage = IntVar() self.cpu_usage.set(CPU_USAGE) self.latency = IntVar() self.latency.set(CLOCK_LATENCY) # File menu filemenu = Menu(self, tearoff=0) filemenu.add_command(label="New Document", command=self.root.newfile, accelerator="Ctrl+N") filemenu.add_command(label="Open", command=self.root.openfile, accelerator="Ctrl+O") filemenu.add_command(label="Save", command=self.root.save, accelerator="Ctrl+S") filemenu.add_command(label="Save As...", command=self.root.saveAs) self.add_cascade(label="File", menu=filemenu) # Edit menu editmenu = Menu(self, tearoff=0) editmenu.add_command(label="Undo", command=self.root.undo, accelerator="Ctrl+Z") editmenu.add_command(label="Redo", command=self.root.redo, accelerator="Ctrl+Y") editmenu.add_separator() editmenu.add_command(label="Cut", command=self.root.edit_cut, accelerator="Ctrl+X") editmenu.add_command(label="Copy", command=self.root.edit_copy, accelerator="Ctrl+C") editmenu.add_command(label="Paste", command=self.root.edit_paste, accelerator="Ctrl+V") editmenu.add_command(label="Select All", command=self.root.select_all, accelerator="Ctrl+A") editmenu.add_separator() editmenu.add_command(label="Increase Font Size", command=self.root.zoom_in, accelerator="Ctrl+=") editmenu.add_command(label="Decrease Font Size", command=self.root.zoom_out, accelerator="Ctrl+-") editmenu.add_separator() editmenu.add_command(label="Clear Console", command=self.root.clear_console) editmenu.add_command(label="Toggle Menu", command=self.root.toggle_menu, accelerator="Ctrl+M") editmenu.add_checkbutton(label="Toggle Window Transparency", command=self.root.toggle_transparency, variable=self.root.transparent) self.add_cascade(label="Edit", menu=editmenu) # Note: Alt renders properly to look like Option, so we don't need a # conditional for those shortcuts codemenu = Menu(self, tearoff=0) codemenu.add_command(label="Evaluate Block", command=self.root.exec_block, accelerator="{}+Return".format(ctrl)) codemenu.add_command(label="Evaluate Line", command=self.root.exec_line, accelerator="Alt+Return") codemenu.add_command(label="Clear Scheduling Clock", command=self.root.killall, accelerator="{}+.".format(ctrl)) codemenu.add_separator() codemenu.add_command(label="Toggle Console", command=self.root.toggle_console) codemenu.add_command(label="Export Console Log", command=self.root.export_console) codemenu.add_separator() codemenu.add_checkbutton(label="Use SC3 Plugins", command=self.root.toggle_sc3_plugins, variable=self.sc3_plugins) codemenu.add_separator() codemenu.add_checkbutton(label="Listen for connections", command=self.root.allow_connections, variable=self.root.listening_for_connections) self.add_cascade(label="Language", menu=codemenu) # Help helpmenu = Menu(self, tearoff=0) helpmenu.add_command(label="Display help message", comman=self.root.help, accelerator="{}+{}".format( ctrl, self.root.help_key)) helpmenu.add_command(label="Visit FoxDot Homepage", command=self.root.openhomepage) helpmenu.add_command(label="Documentation", command=self.root.opendocumentation) helpmenu.add_separator() cpu_menu = Menu(self, tearoff=0) cpu_menu.add_radiobutton(label="Low", variable=self.cpu_usage, value=0, command=self.set_cpu_usage) cpu_menu.add_radiobutton(label="Medium", variable=self.cpu_usage, value=1, command=self.set_cpu_usage) cpu_menu.add_radiobutton(label="High", variable=self.cpu_usage, value=2, command=self.set_cpu_usage) helpmenu.add_cascade(label="CPU Usage", menu=cpu_menu) lat_menu = Menu(self, tearoff=0) lat_menu.add_radiobutton(label="Low", variable=self.latency, value=0, command=self.set_latency) lat_menu.add_radiobutton(label="Medium", variable=self.latency, value=1, command=self.set_latency) lat_menu.add_radiobutton(label="High", variable=self.latency, value=2, command=self.set_latency) helpmenu.add_cascade(label="Clock Latency", menu=lat_menu) helpmenu.add_separator() helpmenu.add_command(label="Open Samples Folder", command=self.root.open_samples_folder) helpmenu.add_command(label="Open config file (advanced)", command=self.root.open_config_file) self.add_cascade(label="Help & Settings", menu=helpmenu) # Tutorials tutorialmenu = Menu(self, tearoff=0) for tutorial in GET_TUTORIAL_FILES(): filename = os.path.basename(tutorial).replace(".py", "") data = filename.split("_") num = data[0] name = " ".join(data[1:]).title() tutorialmenu.add_command(label="Load Tutorial {}: {}".format( num, name), command=partial(self.root.loadfile, tutorial)) self.add_cascade(label="Tutorials", menu=tutorialmenu) # Add to root self.visible = visible if self.visible: master.root.config(menu=self) def toggle(self): """ Hides/shows this menu """ self.root.root.config(menu=self if not self.visible else 0) self.visible = not self.visible return def allow_connections(self, **kwargs): """ Starts a new instance of ServerManager.TempoServer and connects it with the clock """ if self.listening_for_connections.get() == True: Clock = self.root.namespace["Clock"] Clock.start_tempo_server(TempoServer, **kwargs) print("Listening for connections on {}".format(Clock.tempo_server)) else: Clock = self.root.namespace["Clock"] Clock.kill_tempo_server() print("Closed connections") return def start_listening(self, **kwargs): """ Manual starting of FoxDot tempo server """ # TODO - take this method out of the menu self.listening_for_connections.set( not self.listening_for_connections.get()) self.allow_connections(**kwargs) return def set_cpu_usage(self, *args): """ Updates the cpu usage option """ self.root.namespace["Clock"].set_cpu_usage(self.cpu_usage.get()) return def set_latency(self, *args): """ Updates the cpu usage option """ self.root.namespace["Clock"].set_latency(self.latency.get()) return
class FindReplacePanel(PluginPanel): name = 'Text Find & Replace' title = _("Text Find & Replace") def init(self, master): PluginPanel.init(self, master) top = self.panel top = TFrame(top, borderwidth=2, style='FlatFrame') top.pack(side=TOP, expand=1, fill=X) button_frame = TFrame(top, borderwidth=2, style='FlatFrame') button_frame.pack(side=BOTTOM, fill=BOTH, expand=1) button = TButton(button_frame, text=_('Apply'), command=self.replace) button.pack(side=TOP) #---------------------------------------------------------- main_frame = TFrame(top, style='FlatFrame', borderwidth=3) main_frame.pack(side=TOP, fill=X) self.find_var = StringVar(top) self.find_var.set('') findField = TEntryExt(main_frame, textvariable=self.find_var) findField.pack(side=RIGHT) label = TLabel(main_frame, style='FlatLabel', text=_("Find:") + " ") label.pack(side=RIGHT, anchor=E) #--------------------------------------------------------- main_frame = TFrame(top, style='FlatFrame', borderwidth=3) main_frame.pack(side=TOP, fill=X) self.replace_var = StringVar(top) self.replace_var.set('') replaceField = TEntryExt(main_frame, textvariable=self.replace_var) replaceField.pack(side=RIGHT) label = TLabel(main_frame, style='FlatLabel', text=_("Replace to:") + " ") label.pack(side=RIGHT, anchor=E) main_frame = TFrame(top, style='FlatFrame', borderwidth=3) main_frame.pack(side=TOP) #--------------------------------------------------------- label = TLabel(top, text=" " + _("Parameters") + " ", style="FlatLabel") label.pack() parametersFrameLabel = TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) parametersFrameLabel.pack(side=TOP, fill=X, pady=4, padx=4) parametersFrame = TFrame(parametersFrameLabel, style='FlatFrame') self.var_case_sensitive = BooleanVar(top) self.var_case_sensitive.set(False) self.case_sensitive_check = TCheckbutton( parametersFrame, text=_("Case sensitive"), variable=self.var_case_sensitive) self.case_sensitive_check.pack(side=TOP, anchor=W, padx=5) self.var_whole_word = BooleanVar(top) self.var_whole_word.set(False) self.whole_word_check = TCheckbutton(parametersFrame, text=_("Whole word"), variable=self.var_whole_word) self.whole_word_check.pack(side=TOP, anchor=W, padx=5) self.var_regexp = BooleanVar(top) self.var_regexp.set(False) self.regexpCheck = TCheckbutton(parametersFrame, text=_("RegExp search"), variable=self.var_regexp, command=self.disable_enable_action) self.regexpCheck.pack(side=TOP, anchor=W, padx=5) parametersFrame.pack(side=TOP, fill=X, pady=2) ################################################################ def replace_text(self, objects, toReplace, replaceTo): for object in objects: if object.is_Text: if self.var_regexp.get(): if self.var_case_sensitive.get(): p = re.compile(toReplace) else: p = re.compile(toReplace, re.I) text = p.sub(replaceTo, object.text) app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod(object.__class__, _('Text Replace'), 'SetText', text) continue if self.var_whole_word.get(): if not self.var_case_sensitive.get(): if object.text.lower() == toReplace.lower(): text = replaceTo app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod( object.__class__, _('Text Replace'), 'SetText', text) else: if object.text == toReplace: text = replaceTo app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod( object.__class__, _('Text Replace'), 'SetText', text) else: if object.text.lower().find(toReplace.lower(), 0, len(object.text)) != -1: if not self.var_case_sensitive.get(): text = object.text.lower().replace( toReplace.lower(), replaceTo) else: text = object.text.replace(toReplace, replaceTo) app.mw.document.SelectObject(object) app.mw.document.CallObjectMethod( object.__class__, _('Text Replace'), 'SetText', text) if object.is_Group: self.replace_text(object.objects) ################################################################ def replace(self): textObjects = [] textToReplace = self.find_var.get().decode('utf-8') replaceTo = self.replace_var.get().decode('utf-8') for layer in app.mw.document.layers: self.replace_text(layer.objects, textToReplace, replaceTo) app.mw.canvas.ForceRedraw() ################################################################ def disable_enable_action(self): if self.var_regexp.get(): self.whole_word_check['state'] = DISABLED else: self.whole_word_check['state'] = NORMAL ################################################################ def whole_word_action(self): pass
class MyQuestion(object): def __init__(self, parent, question_text, ans1_text, ans2_text, ans3_text, ans4_text, exp1_text, exp2_text, exp3_text, exp4_text, correct_ans): # assigning parameters to attributes self.parent = parent self.qtext = str(question_text) self.text1 = str(ans1_text) self.text2 = str(ans2_text) self.text3 = str(ans3_text) self.text4 = str(ans4_text) self.exp1 = str(exp1_text) self.exp2 = str(exp2_text) self.exp3 = str(exp3_text) self.exp4 = str(exp4_text) self.ans = int(correct_ans) # creating Tkinter variables self.ans_input = IntVar() self.is_correct = BooleanVar() self.efbg = StringVar() self.is_correct_text = StringVar() self.exp_text = StringVar() # developer mode if dev: self.ans_input.set(self.ans) # questionwide bgcolor, fgcolor self.bgcolor = GrayScale(80) self.fgcolor = GrayScale(20) # creating parent frame self.parent_frame() self.question_frame() def parent_frame(self): # creating parent frame self.pf = Frame(self.parent) self.pf.configure(bg=self.bgcolor) self.pf.place(relx=0, rely=0, relwidth=1, relheight=1) def question_frame(self): # creating question frame within parent frame self.qf = Frame(self.pf) self.qf.configure(bg=self.bgcolor) self.qf.place(relx=0, rely=0, relwidth=1, relheight=1) # creating objects within question frame self.title_label() self.radiobutton1() self.radiobutton2() self.radiobutton3() self.radiobutton4() self.check_ans_button() def explanation_frame(self): # creating explanation frame within parent frame self.ef = Frame(self.pf) self.ef.configure(bg=self.efbg.get()) self.ef.place(relx=0, rely=0, relwidth=1, relheight=1) # creating objects within explanation frame self.is_correct_label() self.exp_label() self.next_ques_button() # creating display answer button if answer is wrong if not self.is_correct.get(): self.disp_ans_button() def title_label(self): # creating title label for question frame self.tl = Label(self.qf) self.tl.configure(text=self.qtext) self.tl.configure(font=MyFonts['ExtraLarge']) self.tl.configure(bg=self.bgcolor, fg=self.fgcolor) self.tl.configure(relief=FLAT) self.tl.configure(padx=2, pady=2, anchor=N) self.tl.place(relx=0.05, rely=0.05, relwidth=0.90, relheight=0.10) def radiobutton1(self): # creating radiobuttion1 for question frame self.q1 = Radiobutton(self.qf) self.q1.configure(text='A. ' + self.text1) self.q1.configure(font=MyFonts['Large']) self.q1.configure(bg=self.bgcolor, activebackground=self.bgcolor) self.q1.configure(variable=self.ans_input, value=1) self.q1.place(relx=0.10, rely=0.20) def radiobutton2(self): # creating radiobutton2 for question frame self.q2 = Radiobutton(self.qf) self.q2.configure(text='B. ' + self.text2) self.q2.configure(font=MyFonts['Large']) self.q2.configure(bg=self.bgcolor, activebackground=self.bgcolor) self.q2.configure(variable=self.ans_input, value=2) self.q2.place(relx=0.10, rely=0.35) def radiobutton3(self): # creating radiobutton3 for question frame self.q3 = Radiobutton(self.qf) self.q3.configure(text='C. ' + self.text3) self.q3.configure(font=MyFonts['Large']) self.q3.configure(bg=self.bgcolor, activebackground=self.bgcolor) self.q3.configure(variable=self.ans_input, value=3) self.q3.place(relx=0.10, rely=0.50) def radiobutton4(self): # creating radiobutton4 for question frame self.q4 = Radiobutton(self.qf) self.q4.configure(text='D. ' + self.text4) self.q4.configure(font=MyFonts['Large']) self.q4.configure(bg=self.bgcolor, activebackground=self.bgcolor) self.q4.configure(variable=self.ans_input, value=4) self.q4.place(relx=0.10, rely=0.65) def check_ans_button(self): # creating check answer button for question frame self.cb = MyButton(self.qf, 'Check Answer', self.check_ans, 0.80, 0.85) def is_correct_label(self): # creating is_correct_label for explanation frame self.cl = Label(self.ef) self.cl.configure(text=self.is_correct_text.get()) self.cl.configure(font=MyFonts['ExtraLargeBold']) self.cl.configure(bg=self.efbg.get(), fg=GrayScale(20)) self.cl.configure(relief=FLAT) self.cl.configure(padx=2, pady=2, anchor=N) self.cl.place(relx=0.05, rely=0.05, relwidth=0.90, relheight=0.05) def exp_label(self): # creating exp_label for explanation frame self.el = Label(self.ef) self.el.configure(text=self.exp_text.get()) self.el.configure(font=MyFonts['LargeBold']) self.el.configure(bg=self.efbg.get(), fg=GrayScale(20)) self.el.configure(relief=FLAT) self.el.configure(padx=2, pady=2, anchor=N) self.el.place(relx=0.05, rely=0.10, relwidth=0.90, relheight=0.85) def next_ques_button(self): # creating next question button for explanation frame self.nq = MyButton(self.ef, 'Next Question', self.next_ques, 0.80, 0.85) def disp_ans_button(self): # creating display answer button for explanation frame self.da = MyButton(self.ef, 'Show Answer', self.disp_ans, 0.65, 0.85) def assign_all(self): # assigning correct answer text (ans_text) and explanation attributes (ans_exp) if self.ans == 1: self.ans_text = 'A. ' + self.text1 self.ans_exp = self.exp1 elif self.ans == 2: self.ans_text = 'B. ' + self.text2 self.ans_exp = self.exp2 elif self.ans == 3: self.ans_text = 'C. ' + self.text3 self.ans_exp = self.exp3 elif self.ans == 4: self.ans_text = 'D. ' + self.text4 self.ans_exp = self.exp4 else: self.ans_text = 'invalid correct_ans parameter' self.ans_exp = 'invalid correct_ans parameter' print 'invalid correct_ans parameter, please input between 1 and 4' def check_ans(self): # defining check answer function # is_correct (Boolean conditional) if self.ans_input.get() == self.ans: self.efbg.set(color_green) self.is_correct.set(True) self.is_correct_text.set('Correct Answer! :)') else: self.efbg.set(color_red) self.is_correct.set(False) self.is_correct_text.set('Wrong Answer :(') # only assign values for show answer if user answer is wrong self.assign_all() # appropriate response to selected answer if self.ans_input.get() == 1: self.exp_text.set(self.exp1) self.explanation_frame() self.qf.destroy() elif self.ans_input.get() == 2: self.exp_text.set(self.exp2) self.explanation_frame() self.qf.destroy() elif self.ans_input.get() == 3: self.exp_text.set(self.exp3) self.explanation_frame() self.qf.destroy() elif self.ans_input.get() == 4: self.exp_text.set(self.exp4) self.explanation_frame() self.qf.destroy() else: # no selected answer condition showerror('Error', 'Please select an answer to continue') def disp_ans(self): # defining display answer function tmp_str = self.ans_exp[0].lower() + self.ans_exp[1:] disp_ans_text = 'The correct answer is "' + str( self.ans_text) + '" because ' + str(tmp_str) showinfo('Correct Answer', disp_ans_text) def next_ques(self): # defininf next_question function self.pf.destroy() self.ef.destroy()
class Tagging(Frame): def __init__(self, parent, options): if options == None: options = {} DefaultOptions = {'colorspace':'RGB', 'K':6, 'km_init':'first', 'verbose':False, 'single_thr':0.6, 'metric':'basic'} for op in DefaultOptions: if not op in options: options[op] = DefaultOptions[op] self.options = options self.K_ant = 0 self.num_im=-1 Frame.__init__(self, parent) self.parent = parent self.parent.title("TAGGING") self.F1 = Frame(parent, width=150,borderwidth=2,relief=GROOVE) self.F2 = Frame(parent, width=150,borderwidth=2,relief=GROOVE) self.F3 = Frame(parent) self.F4 = Frame(parent,borderwidth=2,relief=GROOVE) self.F5 = Frame(parent,borderwidth=2,relief=GROOVE) self.F1.pack(side=LEFT, fill=Y, pady = 4, padx=4) self.F2.pack(side=LEFT, fill=Y, pady = 4) self.F3.pack(side=TOP, expand=True, fill=BOTH, pady = 4, padx = 4) self.F4.pack(side=TOP, fill=BOTH, expand=0, padx = 4) self.F5.pack(side=BOTTOM, fill=BOTH, expand=0, pady = 4, padx = 4) self.F1.pack_propagate(0) self.F2.pack_propagate(0) self.F3.pack_propagate(0) lbl = Label(self.F1, text="Groundtruth") lbl.grid(row=0,sticky=W) Frame(self.F1,borderwidth=1,relief=GROOVE,height=2).grid(row=1,sticky=W) lbl = Label(self.F2, text="Detected") lbl.grid(row=0,sticky=W, columnspan=2) Frame(self.F2,borderwidth=1,relief=GROOVE,height=2).grid(row=1,sticky=W, columnspan=2) self.filename = Button(self.F3,text="filename",command=self.ChooseFile) self.filename.pack(side=TOP,expand=0) # #matplotlib setup # plt.ion() self.figure=plt.figure(figsize=(2,2), frameon=False) self.axes=self.figure.add_subplot(111) self.Canvas=FigureCanvasTkAgg(self.figure, master=self.F3) # self.Canvas.show() self.Canvas.get_tk_widget().pack(side=TOP,fill=BOTH,expand=1 ) plt.axis('off') b = Button(self.F4,text=" <<<10 ",command=self.PreviousFast) b.pack(side=LEFT, padx=(20,2), pady=3) b = Button(self.F4,text=" <<1 ",command=self.Previous) b.pack(side=LEFT, pady=3) self.im_name = Button(self.F4,text="image",bd=0, command=self.Results) self.im_name.pack(side=LEFT, expand=True) b = Button(self.F4,text=" 1>> ",command=self.Next) b.pack(side=LEFT) b = Button(self.F4,text=" 10>>> ",command=self.NextFast) b.pack(side=LEFT, padx=(2,20)) F51 = Frame(self.F5) F52 = Frame(self.F5) F53 = Frame(self.F5) F51.pack(fill=BOTH, expand=1, side=LEFT) Frame(self.F5,borderwidth=1,relief=GROOVE,width=2).pack(side=LEFT, fill=Y) F52.pack(fill=BOTH, expand=1, side=LEFT) Frame(self.F5,borderwidth=1,relief=GROOVE,width=2).pack(side=LEFT, fill=Y) F53.pack(fill=BOTH, expand=1, side=LEFT) Label(F51, text="Color space").pack() Frame(F51,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) Label(F52, text="K-Means").pack() Frame(F52,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) Label(F53, text="Labelling").pack() Frame(F53,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) self.ColorMode = StringVar() self.ColorMode.set(self.options[COLORSSPACE['key']]) for text, mode in COLORSSPACE['options_gui']: b = Radiobutton(F51, text=text, variable=self.ColorMode, value=mode, command=self.Results) b.pack(anchor=W) Frame(F51,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) Label(F51, text="Grouping", padx=20).pack() Frame(F51,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) self.Group = BooleanVar() self.Group.set(True) b = Checkbutton(F51, text='Group same label colors', variable=self.Group, command=self.Results) b.pack(anchor=W) F521 = Frame(F52) F522 = Frame(F52) F521.pack(fill=BOTH) F522.pack(fill=BOTH) # F523 = Frame(F52) # F523.pack(fill=BOTH) self.K = StringVar() self.K.set(self.options['K']) # f = Frame(F52) # f.pack(side=TOP, fill=BOTH, expand=0) Label(F521, text="K : ").pack(side=LEFT) Entry(F521, textvariable=self.K, width=3, justify=CENTER).pack(side=LEFT, padx=4) # Label(F52, text="Init", padx=20).pack(anchor=W) # Frame(F521,borderwidth=1,relief=GROOVE,width=2).pack(side=RIGHT, fill=Y, padx=2) self.Fitting = StringVar() self.Fitting.set(self.options[FITTING['key']]) # f = Frame(F52) # f.pack(side=RIGHT, fill=BOTH, expand=0) for text, mode in FITTING['options_gui']: b = Radiobutton(F521, text=text, variable=self.Fitting, value=mode, command=self.Results) b.pack(anchor=W,padx=4) Frame(F522,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) Label(F522, text="Centroid Init", padx=20).pack() Frame(F522,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) # IM = [('First points','first'),('Randomize', 'random'),('Distribtued','distributed'),('Other','Other')] self.KMInit = StringVar() self.KMInit.set(self.options[CENTROIDSINIT['key']]) for text, mode in CENTROIDSINIT['options_gui']: b = Radiobutton(F522, text=text, variable=self.KMInit, value=mode, command=self.Results) b.pack(anchor=W) self.Thr = StringVar() self.Thr.set(self.options['single_thr']) f = Frame(F53) f.pack(side=TOP, fill=BOTH, expand=0) Label(f, text="single\nbasic >\ncolor", justify=LEFT).pack(side=LEFT) Entry(f, textvariable=self.Thr, width=4, justify=CENTER).pack(side=LEFT) # self.Synonymous = BooleanVar() # self.Synonymous.set(self.options['synonyms']) # b = Checkbutton(F53, text='Synonymous', variable=self.Synonymous, command=self.Results) # b.pack(anchor=W) Frame(F53,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) Label(F53, text="Similarity Metric", padx=2).pack() Frame(F53,borderwidth=1,relief=GROOVE,height=2).pack(fill=X) self.Metric = StringVar() self.Metric.set(self.options[SIMILARITY['key']]) for text, mode in SIMILARITY['options_gui']: b = Radiobutton(F53, text=text, variable=self.Metric, value=mode, command=self.Results) b.pack(anchor=W) def ChooseFile(self): filename = tkFileDialog.askopenfilename(initialdir='Images', filetypes=[("Text files","*.txt")]) if filename =='': return self.ImageFolder = os.path.dirname(filename) self.filename['text'] = os.path.basename(filename) self.GT = lb.loadGT(filename) self.num_im = 0 self.Results() def Previous(self): self.num_im -= 1 if self.num_im<-1: self.num_im=0 elif self.num_im<0: self.num_im=0 return self.Results() def PreviousFast(self): self.num_im -= 10 if self.num_im<0: self.num_im=0 self.Results() def Next(self): self.num_im += 1 if self.num_im>=len(self.GT): self.num_im=len(self.GT)-1 return self.Results() def NextFast(self): self.num_im += 10 if self.num_im>=len(self.GT): self.num_im=len(self.GT)-1 self.Results() def Results(self): if self.num_im<0 or self.num_im>=len(self.GT): return #self.parent.config(cursor="wait") self.parent.update() self.im_name['text'] = self.GT[self.num_im][0] im = io.imread(self.ImageFolder+"/"+self.GT[self.num_im][0]) self.options['K'] = int(self.K.get()) self.options['single_thr'] = float(self.Thr.get()) # self.options['synonyms'] = self.Synonymous.get() self.options[COLORSSPACE['key']] = self.ColorMode.get() self.options[CENTROIDSINIT['key']] = self.KMInit.get() self.options[SIMILARITY['key']] = self.Metric.get() self.options[FITTING['key']] = self.Fitting.get() if self.options['fitting'] != 'None': if self.K_ant==0: self.K_ant = self.options['K'] self.options['K'] = 0 self.K.set(0) pass else: if self.K_ant>0: self.K.set(self.K_ant) self.options['K'] = self.K_ant self.K_ant = 0 self.labels, self.which, self.km = lb.processImage(im, self.options) if self.options['K'] == 0: self.K.set(self.km.K) if not self.Group.get(): self.labels = [w for ww in [[w]*len(z) for w,z in zip(self.labels,self.which)] for w in ww] self.which = [[w] for ww in self.which for w in ww] # get percentages for every label percent = np.zeros((len(self.which),1)) for i,w in enumerate(self.which): for k in w: percent[i] += np.sum(self.km.clusters==k) percent = percent*100/self.km.clusters.size # get color for every label from image sh = im.shape; im = np.reshape(im, (-1, im.shape[2])) colors = np.zeros((len(self.which),3)) for i,w in enumerate(self.which): for k in w: colors[i] += np.mean(im[self.km.clusters==k,:],0) colors[i] /= len(w) im = np.reshape(im, sh) self.im = im self.CBgt = self.CreateCheckList(self.F1, self.GT[self.num_im][1]) self.CBdetected = self.CreateCheckList(self.F2, self.labels, percent, colors) l = Label(self.F2,text='similarity: '+'%.2f' % (lb.similarityMetric(self.labels, self.GT[self.num_im][1], self.options)*100)+'%') l.grid(columnspan=2,sticky=W+E+N+S) self.F2.grid_rowconfigure(self.F2.grid_size()[1]-1, weight=1) self.CheckLabels() #self.parent.config(cursor="") self.parent.update() self.Segment() # self.ShowImage(im) def Segment(self): all_widgetes = self.F2.winfo_children() cb = [w for w in all_widgetes if w.winfo_class() == 'Checkbutton'] lab_colors = np.zeros((len(cb),3)) for i,c in enumerate(cb): lab_colors[i,0] = int(c.cget('bg')[1:3], 16) lab_colors[i,1] = int(c.cget('bg')[3:5], 16) lab_colors[i,2] = int(c.cget('bg')[5:7], 16) ims = np.empty_like(self.im) ims = np.reshape(ims, (-1, ims.shape[2])) for i,w in enumerate(self.which): for k in w: ims[self.km.clusters==k]=lab_colors[i] ims = np.reshape(ims, self.im.shape) self.ShowImage(np.hstack((ims,self.im))) def ShowImage(self,im): self.axes.imshow(im) plt.axis('off') self.Canvas.draw() def CreateCheckList(self, frame, labels, values=None, colors=None): all_widgetes = [w for w in frame.winfo_children() if w.winfo_class() == 'Checkbutton'] for w in all_widgetes: w.destroy() all_widgetes = [w for w in frame.winfo_children() if w.winfo_class() == 'Label'] for w in all_widgetes[1:]: w.destroy() var = [] if values is not None: add_text = ["%5.1f" % (values[i]) +'%' for i in range(len(values))] for i in range(len(labels)): var.append(BooleanVar()) fgc = "black" if colors is not None: mycolor = '#%02x%02x%02x' % (colors[i,0], colors[i,1], colors[i,2]) if (colors[i,0]+colors[i,1]+colors[i,2])/3/255<=0.5: fgc = "#FFFFFF" else: mycolor = frame.cget('bg') cb = Checkbutton(frame, text=labels[i], state=DISABLED, variable=var[i], bg=mycolor, disabledforeground=fgc, anchor=W) # cb.pack(anchor=W, fill=X, padx=2) cb.grid(row=i+2,column=0,sticky=W+E) if values is not None: cb = Label(frame, text=add_text[i], bg=mycolor, fg=fgc, anchor=E) cb.grid(row=i+2,column=1,sticky=W+E+N+S) frame.grid_rowconfigure(i+2, weight=0) return var def CheckLabels(self): for i in range(len(self.labels)): if self.labels[i] in self.GT[self.num_im][1]: self.CBdetected[i].set(True) for i in range(len(self.GT[self.num_im][1])): if self.GT[self.num_im][1][i] in self.labels: self.CBgt[i].set(True)
class wm_seg: """ Simple GUI application If the application inside a container, automatic updates are removed. The application uses two frames (tabs): - training - testing """ def __init__(self, master, container): self.master = master master.title("nicMSlesions") # running on a container self.container = container # gui attributes self.path = os.getcwd() self.default_config = None self.user_config = None self.current_folder = os.getcwd() self.list_train_pretrained_nets = [] self.list_test_nets = [] self.version = __version__ if self.container is False: # version_number self.commit_version = subprocess.check_output( ['git', 'rev-parse', 'HEAD']) # queue and thread parameters. All processes are embedded # inside threads to avoid freezing the application self.train_task = None self.test_task = None self.test_queue = Queue.Queue() self.train_queue = Queue.Queue() # -------------------------------------------------- # parameters. Mostly from the config/*.cfg files # -------------------------------------------------- # data parameters self.param_training_folder = StringVar() self.param_test_folder = StringVar() self.param_FLAIR_tag = StringVar() self.param_T1_tag = StringVar() self.param_MOD3_tag = StringVar() self.param_MOD4_tag = StringVar() self.param_mask_tag = StringVar() self.param_model_tag = StringVar() self.param_register_modalities = BooleanVar() self.param_skull_stripping = BooleanVar() self.param_denoise = BooleanVar() self.param_denoise_iter = IntVar() self.param_save_tmp = BooleanVar() self.param_debug = BooleanVar() # train parameters self.param_net_folder = os.path.join(self.current_folder, 'nets') self.param_use_pretrained_model = BooleanVar() self.param_pretrained_model = StringVar() self.param_inference_model = StringVar() self.param_num_layers = IntVar() self.param_net_name = StringVar() self.param_net_name.set('None') self.param_balanced_dataset = StringVar() self.param_fract_negatives = DoubleVar() # model parameters self.param_pretrained = None self.param_min_th = DoubleVar() self.param_patch_size = IntVar() self.param_weight_paths = StringVar() self.param_load_weights = BooleanVar() self.param_train_split = DoubleVar() self.param_max_epochs = IntVar() self.param_patience = IntVar() self.param_batch_size = IntVar() self.param_net_verbose = IntVar() self.param_t_bin = DoubleVar() self.param_l_min = IntVar() self.param_min_error = DoubleVar() self.param_mode = BooleanVar() self.param_gpu_number = IntVar() # load the default configuration from the conf file self.load_default_configuration() # self frame (tabbed notebook) self.note = Notebook(self.master) self.note.pack() os.system('cls' if platform.system() == 'Windows' else 'clear') print "##################################################" print "# ------------ #" print "# nicMSlesions #" print "# ------------ #" print "# MS WM lesion segmentation #" print "# #" print "# ------------------------------- #" print "# (c) Sergi Valverde 2018 #" print "# Neuroimage Computing Group #" print "# ------------------------------- #" print "##################################################\n" print "Please select options for training or inference in the menu..." # -------------------------------------------------- # training tab # -------------------------------------------------- self.train_frame = Frame() self.note.add(self.train_frame, text="Training") self.test_frame = Frame() self.note.add(self.test_frame, text="Inference") # label frames cl_s = 5 self.tr_frame = LabelFrame(self.train_frame, text="Training images:") self.tr_frame.grid(row=0, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) self.model_frame = LabelFrame(self.train_frame, text="CNN model:") self.model_frame.grid(row=5, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) # training options self.inFolderLbl = Label(self.tr_frame, text="Training folder:") self.inFolderLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2) self.inFolderTxt = Entry(self.tr_frame) self.inFolderTxt.grid(row=0, column=1, columnspan=5, sticky="W", pady=3) self.inFileBtn = Button(self.tr_frame, text="Browse ...", command=self.load_training_path) self.inFileBtn.grid(row=0, column=5, columnspan=1, sticky='W', padx=5, pady=1) self.optionsBtn = Button(self.tr_frame, text="Other options", command=self.parameter_window) self.optionsBtn.grid(row=0, column=10, columnspan=1, sticky="W", padx=(100, 1), pady=1) # setting input modalities: FLAIR + T1 are mandatory # Mod 3 / 4 are optional self.flairTagLbl = Label(self.tr_frame, text="FLAIR tag:") self.flairTagLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2) self.flairTxt = Entry(self.tr_frame, textvariable=self.param_FLAIR_tag) self.flairTxt.grid(row=1, column=1, columnspan=1, sticky="W", pady=1) self.t1TagLbl = Label(self.tr_frame, text="T1 tag:") self.t1TagLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2) self.t1Txt = Entry(self.tr_frame, textvariable=self.param_T1_tag) self.t1Txt.grid(row=2, column=1, columnspan=1, sticky="W", pady=1) self.mod3TagLbl = Label(self.tr_frame, text="mod 3 tag:") self.mod3TagLbl.grid(row=3, column=0, sticky='E', padx=5, pady=2) self.mod3Txt = Entry(self.tr_frame, textvariable=self.param_MOD3_tag) self.mod3Txt.grid(row=3, column=1, columnspan=1, sticky="W", pady=1) self.mod4TagLbl = Label(self.tr_frame, text="mod 4 tag:") self.mod4TagLbl.grid(row=4, column=0, sticky='E', padx=5, pady=2) self.mod4Txt = Entry(self.tr_frame, textvariable=self.param_MOD4_tag) self.mod4Txt.grid(row=4, column=1, columnspan=1, sticky="W", pady=1) self.maskTagLbl = Label(self.tr_frame, text="MASK tag:") self.maskTagLbl.grid(row=5, column=0, sticky='E', padx=5, pady=2) self.maskTxt = Entry(self.tr_frame, textvariable=self.param_mask_tag) self.maskTxt.grid(row=5, column=1, columnspan=1, sticky="W", pady=1) # model options self.modelTagLbl = Label(self.model_frame, text="Model name:") self.modelTagLbl.grid(row=6, column=0, sticky='E', padx=5, pady=2) self.modelTxt = Entry(self.model_frame, textvariable=self.param_net_name) self.modelTxt.grid(row=6, column=1, columnspan=1, sticky="W", pady=1) self.checkPretrain = Checkbutton(self.model_frame, text="use pretrained", var=self.param_use_pretrained_model) self.checkPretrain.grid(row=6, column=3, padx=5, pady=5) self.update_pretrained_nets() self.pretrainTxt = OptionMenu(self.model_frame, self.param_pretrained_model, *self.list_train_pretrained_nets) self.pretrainTxt.grid(row=6, column=5, sticky='E', padx=5, pady=5) # START button links self.trainingBtn = Button(self.train_frame, state='disabled', text="Start training", command=self.train_net) self.trainingBtn.grid(row=7, column=0, sticky='W', padx=1, pady=1) # -------------------------------------------------- # inference tab # -------------------------------------------------- self.tt_frame = LabelFrame(self.test_frame, text="Inference images:") self.tt_frame.grid(row=0, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) self.test_model_frame = LabelFrame(self.test_frame, text="CNN model:") self.test_model_frame.grid(row=5, columnspan=cl_s, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5) # testing options self.test_inFolderLbl = Label(self.tt_frame, text="Testing folder:") self.test_inFolderLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2) self.test_inFolderTxt = Entry(self.tt_frame) self.test_inFolderTxt.grid(row=0, column=1, columnspan=5, sticky="W", pady=3) self.test_inFileBtn = Button(self.tt_frame, text="Browse ...", command=self.load_testing_path) self.test_inFileBtn.grid(row=0, column=5, columnspan=1, sticky='W', padx=5, pady=1) self.test_optionsBtn = Button(self.tt_frame, text="Other options", command=self.parameter_window) self.test_optionsBtn.grid(row=0, column=10, columnspan=1, sticky="W", padx=(100, 1), pady=1) self.test_flairTagLbl = Label(self.tt_frame, text="FLAIR tag:") self.test_flairTagLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2) self.test_flairTxt = Entry(self.tt_frame, textvariable=self.param_FLAIR_tag) self.test_flairTxt.grid(row=1, column=1, columnspan=1, sticky="W", pady=1) self.test_t1TagLbl = Label(self.tt_frame, text="T1 tag:") self.test_t1TagLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2) self.test_t1Txt = Entry(self.tt_frame, textvariable=self.param_T1_tag) self.test_t1Txt.grid(row=2, column=1, columnspan=1, sticky="W", pady=1) self.test_mod3TagLbl = Label(self.tt_frame, text="mod 3 tag:") self.test_mod3TagLbl.grid(row=3, column=0, sticky='E', padx=5, pady=2) self.test_mod3Txt = Entry(self.tt_frame, textvariable=self.param_MOD3_tag) self.test_mod3Txt.grid(row=3, column=1, columnspan=1, sticky="W", pady=1) self.test_mod4TagLbl = Label(self.tt_frame, text="mod 4 tag:") self.test_mod4TagLbl.grid(row=4, column=0, sticky='E', padx=5, pady=2) self.test_mod4Txt = Entry(self.tt_frame, textvariable=self.param_MOD4_tag) self.test_mod4Txt.grid(row=4, column=1, columnspan=1, sticky="W", pady=1) self.test_pretrainTxt = OptionMenu(self.test_model_frame, self.param_inference_model, *self.list_test_nets) self.param_inference_model.set('None') self.test_pretrainTxt.grid(row=5, column=0, sticky='E', padx=5, pady=5) # START button links cto docker task self.inferenceBtn = Button(self.test_frame, state='disabled', text="Start inference", command=self.infer_segmentation) self.inferenceBtn.grid(row=7, column=0, sticky='W', padx=1, pady=1) # train / test ABOUT button self.train_aboutBtn = Button(self.train_frame, text="about", command=self.about_window) self.train_aboutBtn.grid(row=7, column=4, sticky='E', padx=(1, 1), pady=1) self.test_aboutBtn = Button(self.test_frame, text="about", command=self.about_window) self.test_aboutBtn.grid(row=7, column=4, sticky='E', padx=(1, 1), pady=1) # Processing state self.process_indicator = StringVar() self.process_indicator.set(' ') self.label_indicator = Label(master, textvariable=self.process_indicator) self.label_indicator.pack(side="left") # Closing processing events is implemented via # a master protocol self.master.protocol("WM_DELETE_WINDOW", self.close_event) def parameter_window(self): """ Setting other parameters using an emerging window CNN parameters, CUDA device, post-processing.... """ t = Toplevel(self.master) t.wm_title("Other parameters") # data parameters t_data = LabelFrame(t, text="data options:") t_data.grid(row=0, sticky="WE") checkPretrain = Checkbutton(t_data, text="Register modalities", var=self.param_register_modalities) checkPretrain.grid(row=0, sticky='W') checkSkull = Checkbutton(t_data, text="Skull-strip modalities", var=self.param_skull_stripping) checkSkull.grid(row=1, sticky="W") checkDenoise = Checkbutton(t_data, text="Denoise masks", var=self.param_denoise) checkDenoise.grid(row=2, sticky="W") denoise_iter_label = Label(t_data, text=" Denoise iter: ") denoise_iter_label.grid(row=3, sticky="W") denoise_iter_entry = Entry(t_data, textvariable=self.param_denoise_iter) denoise_iter_entry.grid(row=3, column=1, sticky="E") check_tmp = Checkbutton(t_data, text="Save tmp files", var=self.param_save_tmp) check_tmp.grid(row=4, sticky="W") checkdebug = Checkbutton(t_data, text="Debug mode", var=self.param_debug) checkdebug.grid(row=5, sticky="W") # model parameters t_model = LabelFrame(t, text="Model:") t_model.grid(row=5, sticky="EW") maxepochs_label = Label(t_model, text="Max epochs: ") maxepochs_label.grid(row=6, sticky="W") maxepochs_entry = Entry(t_model, textvariable=self.param_max_epochs) maxepochs_entry.grid(row=6, column=1, sticky="E") trainsplit_label = Label(t_model, text="Validation %: ") trainsplit_label.grid(row=7, sticky="W") trainsplit_entry = Entry(t_model, textvariable=self.param_train_split) trainsplit_entry.grid(row=7, column=1, sticky="E") batchsize_label = Label(t_model, text="Test batch size:") batchsize_label.grid(row=8, sticky="W") batchsize_entry = Entry(t_model, textvariable=self.param_batch_size) batchsize_entry.grid(row=8, column=1, sticky="E") mode_label = Label(t_model, text="Verbosity:") mode_label.grid(row=9, sticky="W") mode_entry = Entry(t_model, textvariable=self.param_net_verbose) mode_entry.grid(row=9, column=1, sticky="E") #gpu_mode = Checkbutton(t_model, # text="GPU:", # var=self.param_mode) #gpu_mode.grid(row=10, sticky="W") gpu_number = Label(t_model, text="GPU number:") gpu_number.grid(row=10, sticky="W") gpu_entry = Entry(t_model, textvariable=self.param_gpu_number) gpu_entry.grid(row=10, column=1, sticky="W") # training parameters tr_model = LabelFrame(t, text="Training:") tr_model.grid(row=12, sticky="EW") balanced_label = Label(tr_model, text="Balanced dataset: ") balanced_label.grid(row=13, sticky="W") balanced_entry = Entry(tr_model, textvariable=self.param_balanced_dataset) balanced_entry.grid(row=13, column=1, sticky="E") fraction_label = Label(tr_model, text="Fraction negative/positives: ") fraction_label.grid(row=14, sticky="W") fraction_entry = Entry(tr_model, textvariable=self.param_fract_negatives) fraction_entry.grid(row=14, column=1, sticky="E") # postprocessing parameters t_post = LabelFrame(t, text="Post-processing: ") t_post.grid(row=15, sticky="EW") t_bin_label = Label(t_post, text="Out probability th: ") t_bin_label.grid(row=16, sticky="W") t_bin_entry = Entry(t_post, textvariable=self.param_t_bin) t_bin_entry.grid(row=16, column=1, sticky="E") l_min_label = Label(t_post, text="Min out region size: ") l_min_label.grid(row=17, sticky="W") l_min_entry = Entry(t_post, textvariable=self.param_l_min) l_min_entry.grid(row=17, column=1, sticky="E") vol_min_label = Label(t_post, text="Min vol error (ml): ") vol_min_label.grid(row=18, sticky="W") vol_min_entry = Entry(t_post, textvariable=self.param_min_error) vol_min_entry.grid(row=18, column=1, sticky="E") def load_default_configuration(self): """ load the default configuration from /config/default.cfg This method assign each of the configuration parameters to class attributes """ default_config = ConfigParser.SafeConfigParser() default_config.read(os.path.join(self.path, 'config', 'default.cfg')) # dastaset parameters self.param_training_folder.set( default_config.get('database', 'train_folder')) self.param_test_folder.set( default_config.get('database', 'inference_folder')) self.param_FLAIR_tag.set(default_config.get('database', 'flair_tags')) self.param_T1_tag.set(default_config.get('database', 't1_tags')) self.param_MOD3_tag.set(default_config.get('database', 'mod3_tags')) self.param_MOD4_tag.set(default_config.get('database', 'mod4_tags')) self.param_mask_tag.set(default_config.get('database', 'roi_tags')) self.param_register_modalities.set( default_config.get('database', 'register_modalities')) self.param_denoise.set(default_config.get('database', 'denoise')) self.param_denoise_iter.set( default_config.getint('database', 'denoise_iter')) self.param_skull_stripping.set( default_config.get('database', 'skull_stripping')) self.param_save_tmp.set(default_config.get('database', 'save_tmp')) self.param_debug.set(default_config.get('database', 'debug')) # train parameters self.param_use_pretrained_model.set( default_config.get('train', 'full_train')) self.param_pretrained_model.set( default_config.get('train', 'pretrained_model')) self.param_inference_model.set(" ") self.param_balanced_dataset.set( default_config.get('train', 'balanced_training')) self.param_fract_negatives.set( default_config.getfloat('train', 'fraction_negatives')) # model parameters self.param_net_folder = os.path.join(self.current_folder, 'nets') self.param_net_name.set(default_config.get('model', 'name')) self.param_train_split.set( default_config.getfloat('model', 'train_split')) self.param_max_epochs.set(default_config.getint('model', 'max_epochs')) self.param_patience.set(default_config.getint('model', 'patience')) self.param_batch_size.set(default_config.getint('model', 'batch_size')) self.param_net_verbose.set(default_config.get('model', 'net_verbose')) self.param_gpu_number.set(default_config.getint('model', 'gpu_number')) # self.param_mode.set(default_config.get('model', 'gpu_mode')) # post-processing self.param_l_min.set(default_config.getint('postprocessing', 'l_min')) self.param_t_bin.set(default_config.getfloat('postprocessing', 't_bin')) self.param_min_error.set( default_config.getfloat('postprocessing', 'min_error')) def write_user_configuration(self): """ write the configuration into config/configuration.cfg """ user_config = ConfigParser.RawConfigParser() # dataset parameters user_config.add_section('database') user_config.set('database', 'train_folder', self.param_training_folder.get()) user_config.set('database', 'inference_folder', self.param_test_folder.get()) user_config.set('database', 'flair_tags', self.param_FLAIR_tag.get()) user_config.set('database', 't1_tags', self.param_T1_tag.get()) user_config.set('database', 'mod3_tags', self.param_MOD3_tag.get()) user_config.set('database', 'mod4_tags', self.param_MOD4_tag.get()) user_config.set('database', 'roi_tags', self.param_mask_tag.get()) user_config.set('database', 'register_modalities', self.param_register_modalities.get()) user_config.set('database', 'denoise', self.param_denoise.get()) user_config.set('database', 'denoise_iter', self.param_denoise_iter.get()) user_config.set('database', 'skull_stripping', self.param_skull_stripping.get()) user_config.set('database', 'save_tmp', self.param_save_tmp.get()) user_config.set('database', 'debug', self.param_debug.get()) # train parameters user_config.add_section('train') user_config.set('train', 'full_train', not (self.param_use_pretrained_model.get())) user_config.set('train', 'pretrained_model', self.param_pretrained_model.get()) user_config.set('train', 'balanced_training', self.param_balanced_dataset.get()) user_config.set('train', 'fraction_negatives', self.param_fract_negatives.get()) # model parameters user_config.add_section('model') user_config.set('model', 'name', self.param_net_name.get()) user_config.set('model', 'pretrained', self.param_pretrained) user_config.set('model', 'train_split', self.param_train_split.get()) user_config.set('model', 'max_epochs', self.param_max_epochs.get()) user_config.set('model', 'patience', self.param_patience.get()) user_config.set('model', 'batch_size', self.param_batch_size.get()) user_config.set('model', 'net_verbose', self.param_net_verbose.get()) # user_config.set('model', 'gpu_mode', self.param_mode.get()) user_config.set('model', 'gpu_number', self.param_gpu_number.get()) # postprocessing parameters user_config.add_section('postprocessing') user_config.set('postprocessing', 't_bin', self.param_t_bin.get()) user_config.set('postprocessing', 'l_min', self.param_l_min.get()) user_config.set('postprocessing', 'min_error', self.param_min_error.get()) # Writing our configuration file to 'example.cfg' with open(os.path.join(self.path, 'config', 'configuration.cfg'), 'wb') as configfile: user_config.write(configfile) def load_training_path(self): """ Select training path from disk and write it. If the app is run inside a container, link the iniitaldir with /data """ initialdir = '/data' if self.container else os.getcwd() fname = askdirectory(initialdir=initialdir) if fname: try: self.param_training_folder.set(fname) self.inFolderTxt.delete(0, END) self.inFolderTxt.insert(0, self.param_training_folder.get()) self.trainingBtn['state'] = 'normal' except: pass def load_testing_path(self): """ Selecet the inference path from disk and write it If the app is run inside a container, link the iniitaldir with /data """ initialdir = '/data' if self.container else os.getcwd() fname = askdirectory(initialdir=initialdir) if fname: try: self.param_test_folder.set(fname) self.test_inFolderTxt.delete(0, END) self.test_inFolderTxt.insert(0, self.param_test_folder.get()) self.inferenceBtn['state'] = 'normal' except: pass def update_pretrained_nets(self): """ get a list of the different net configuration present in the system. Each model configuration is represented by a folder containing the network weights for each of the networks. The baseline net config is always included by default """ folders = os.listdir(self.param_net_folder) self.list_train_pretrained_nets = folders self.list_test_nets = folders def write_to_console(self, txt): """ to doc: important method """ self.command_out.insert(END, str(txt)) def write_to_test_console(self, txt): """ to doc: important method """ self.test_command_out.insert(END, str(txt)) def infer_segmentation(self): """ Method implementing the inference process: - Check network selection - write the configuration to disk - Run the process on a new thread """ if self.param_inference_model.get() == 'None': print "ERROR: Please, select a network model before starting...\n" return if self.test_task is None: self.inferenceBtn.config(state='disabled') self.param_net_name.set(self.param_inference_model.get()) self.param_use_pretrained_model.set(False) self.write_user_configuration() print "\n-----------------------" print "Running configuration:" print "-----------------------" print "Inference model:", self.param_model_tag.get() print "Inference folder:", self.param_test_folder.get(), "\n" print "Method info:" print "------------" self.test_task = ThreadedTask(self.write_to_test_console, self.test_queue, mode='testing') self.test_task.start() self.master.after(100, self.process_container_queue) def train_net(self): """ Method implementing the training process: - write the configuration to disk - Run the process on a new thread """ if self.param_net_name.get() == 'None': print "ERROR: Please, define network name before starting...\n" return self.trainingBtn['state'] = 'disable' if self.train_task is None: self.trainingBtn.update() self.write_user_configuration() print "\n-----------------------" print "Running configuration:" print "-----------------------" print "Train model:", self.param_net_name.get() print "Training folder:", self.param_training_folder.get(), "\n" print "Method info:" print "------------" self.train_task = ThreadedTask(self.write_to_console, self.test_queue, mode='training') self.train_task.start() self.master.after(100, self.process_container_queue) def check_update(self): """ check update version and propose to download it if differnt So far, a rudimentary mode is used to check the last version. """ # I have to discard possible local changes :( print "---------------------------------------" print "Updating software" print "current version:", self.commit_version remote_commit = subprocess.check_output(['git', 'stash']) remote_commit = subprocess.check_output(['git', 'fetch']) remote_commit = subprocess.check_output( ['git', 'rev-parse', 'origin/master']) if remote_commit != self.commit_version: proc = subprocess.check_output(['git', 'pull', 'origin', 'master']) self.check_link.config(text="Updated") self.commit_version = remote_commit print "updated version:", self.commit_version else: print "This software is already in the latest version" print "---------------------------------------" def about_window(self): """ Window showing information about the software and version number, including auto-update. If the application is run from a container, then auto-update is disabled """ def callback(event): """ open webbrowser when clicking links """ webbrowser.open_new(event.widget.cget("text")) # main window t = Toplevel(self.master, width=500, height=500) t.wm_title("About") # NIC logo + name title = Label(t, text="nicMSlesions v" + self.version + "\n" "Multiple Sclerosis White Matter Lesion Segmentation") title.grid(row=2, column=1, padx=20, pady=10) img = ImageTk.PhotoImage(Image.open('./logonic.png')) imglabel = Label(t, image=img) imglabel.image = img imglabel.grid(row=1, column=1, padx=10, pady=10) group_name = Label(t, text="Copyright Sergi Valverde (2018-) \n " + "NeuroImage Computing Group") group_name.grid(row=3, column=1) group_link = Label(t, text=r"http://atc.udg.edu/nic", fg="blue", cursor="hand2") group_link.grid(row=4, column=1) group_link.bind("<Button-1>", callback) license_content = "Licensed under the BSD 2-Clause license. \n" + \ "A copy of the license is present in the root directory." license_label = Label(t, text=license_content) license_label.grid(row=5, column=1, padx=20, pady=20) # if self.container is False: # # check version and updates # version_number = Label(t, text="commit: " + self.commit_version) # version_number.grid(row=6, column=1, padx=20, pady=(1, 1)) # # self.check_link = Button(t, # text="Check for updates", # command=self.check_update) # self.check_link.grid(row=7, column=1) def process_container_queue(self): """ Process the threading queue. When the threaded processes are finished, buttons are reset and a message is shown in the app. """ self.process_indicator.set('Running... please wait') try: msg = self.test_queue.get(0) self.process_indicator.set('Done. See log for more details.') self.inferenceBtn['state'] = 'normal' self.trainingBtn['state'] = 'normal' except Queue.Empty: self.master.after(100, self.process_container_queue) def close_event(self): """ Stop the thread processes using OS related calls. """ if self.train_task is not None: self.train_task.stop_process() if self.test_task is not None: self.test_task.stop_process() os.system('cls' if platform.system == "Windows" else 'clear') root.destroy()
class GUI: def _run(self): self.saveBtn.config(state=DISABLED) self.progressTxt.config(state=NORMAL) self.progressTxt.delete('1.0', END) self.progressTxt.update() self.progressTxt.config(state=DISABLED) inputId = self.txEntry.get() item = map(int, self.dbLbox.curselection()) db = self.dbids[item[0]] self.runBtn.config(state=DISABLED) self.inputId, self.inputName, self.hprobes = main(inputId, db, debug=self.debug, txt=self.progressTxt) self.runBtn.config(state=NORMAL) if self.hprobes is not None: self.saveBtn.config(state=NORMAL) def _quitGUI(self): #rpath = self.progressTxt.get('8.0','end-1c') #if rpath.startswith('Your results'): # tkMessageBox.showinfo("Quit", self.progressTxt.get('8.0','end-1c')) self.master.destroy() def _save(self): hps = filter_probes(self.hprobes, self.spec.get(), self.mingc.get(), self.multiexon.get(), self.mintm.get(), self.maxtm.get(), self.mindimer.get(), self.minfold.get(), self.maxduplex.get()) result_csv = write_probesCSV(self.inputId, self.inputName, hps, self.progressTxt) result_fna = write_probesFNA(self.inputId, self.inputName, hps, self.progressTxt) tkMessageBox.showinfo('Result file', 'Details on ' + str(len(hps)) + \ ' hybridization probe(s) were exported to ' + \ result_csv + "\n\n" + \ 'Sequences of '+ str(len(hps)) + \ ' hybridization probe(s) were exported to ' + \ result_fna) def __init__(self, master, dbnames, dbids, debug, version): self.dbids = dbids self.debug = debug self.master = master master.title('Plish Probe Designer') self.logoImg = PhotoImage(file=get_script_path() + '/img/plishLogo.gif') self.logoLbl = Label(master, image=self.logoImg) self.logoLbl.grid(row=0, columnspan=3) self.logoLbl.img = self.logoImg self.dbLbl = Label(master, text='Database') self.dbLbl.grid(row=1, sticky=W + N) self.dbLbox = Listbox(master, width=63, height=4) self.dbLbox.configure(exportselection=False) for i in range(len(dbnames)): self.dbLbox.insert(i, dbnames[i]) self.dbLbox.select_set(0) self.dbLbox.grid(row=1, column=1, columnspan=2, sticky=N) self.txLbl = Label(master, text='Transcript ID') self.txLbl.grid(row=2, sticky=W + N) self.txEntry = Entry(master, width=39) self.txEntry.grid(row=2, column=1, sticky=W + N) self.runBtn = Button(master, text='Run', command=self._run, width=15) self.runBtn.grid(row=2, column=2) self.progressLbl = Label(master, text='Progress') self.progressLbl.grid(row=4, sticky=W + N) self.progressTxt = Text(bg="#263238", fg="#ffffff", state=DISABLED, width=51, height=16) self.progressTxt.grid(row=4, column=1) self.saveBtn = Button(master, text='Save', command=self._save, state=DISABLED, width=15) self.saveBtn.grid(row=5, column=2, sticky=N) self.quitBtn = Button(master, text='Quit', command=self._quitGUI, width=15) self.quitBtn.grid(row=6, column=2, sticky=N) self.aboutLF = LabelFrame(master, text='About', width=300) self.aboutLF.grid(row=5, column=0, rowspan=2, columnspan=2, sticky=N + W) self.versionLbl = Label(self.aboutLF, text='PLISH Probe Designer, Version ' + version + '\n' + \ '(c) Heller lab, Stanford University School of Medicine\n' + \ ' Daniel C. Ellwanger <*****@*****.**> ', justify=LEFT) self.versionLbl.grid(row=0, column=0, sticky=N) # Filter self.filterLF = LabelFrame(master, text='Filter') self.filterLF.grid(row=4, column=2, rowspan=2, sticky=N + W) self.mingc = DoubleVar() self.mingc.set(_defaultGC) self.mingcLbl = Label(self.filterLF, text='Min. GC') self.mingcLbl.grid(row=0, column=0, sticky=N + W) self.mingcEntry = Entry(self.filterLF, width=5, text=self.mingc) self.mingcEntry.grid(row=0, column=1, sticky=N + W) self.mingcLbl2 = Label(self.filterLF, text='%') self.mingcLbl2.grid(row=0, column=2, sticky=N + W) self.spec = StringVar(master) self.spec.set("isoform") self.specLbl = Label(self.filterLF, text='Specificity') self.specLbl.grid(row=1, column=0, sticky=N + W) self.specOm = OptionMenu(self.filterLF, self.spec, "isoform", "gene", "none") self.specOm.grid(row=1, column=1, sticky=N + W, columnspan=2) self.mintm = DoubleVar() self.mintm.set(_defaultMinTm) self.mintmLbl = Label(self.filterLF, text='Min. Tm') self.mintmLbl.grid(row=2, column=0, sticky=N + W) self.mintmEntry = Entry(self.filterLF, width=5, text=self.mintm) self.mintmEntry.grid(row=2, column=1, sticky=N + W) self.mintmLbl2 = Label(self.filterLF, text=u'\N{DEGREE SIGN}' + 'C') self.mintmLbl2.grid(row=2, column=2, sticky=N + W) self.maxtm = DoubleVar() self.maxtm.set(_defaultMaxTm) self.maxtmLbl = Label(self.filterLF, text='Max. Tm') self.maxtmLbl.grid(row=3, column=0, sticky=N + W) self.maxtmEntry = Entry(self.filterLF, width=5, text=self.maxtm) self.maxtmEntry.grid(row=3, column=1, sticky=N + W) self.maxtmLbl2 = Label(self.filterLF, text=u'\N{DEGREE SIGN}' + 'C') self.maxtmLbl2.grid(row=3, column=2, sticky=N + W) self.minfold = DoubleVar() self.minfold.set(_defaultMinFold) self.minfoldLbl = Label(self.filterLF, text='Min. Fold') self.minfoldLbl.grid(row=4, column=0, sticky=N + W) self.minfoldEntry = Entry(self.filterLF, width=5, text=self.minfold) self.minfoldEntry.grid(row=4, column=1, sticky=N + W) self.minfoldLbl2 = Label(self.filterLF, text='kcal/mol') self.minfoldLbl2.grid(row=4, column=2, sticky=N + W) self.mindimer = DoubleVar() self.mindimer.set(_defaultMinDimer) self.mindimerLbl = Label(self.filterLF, text='Min. Dimer') self.mindimerLbl.grid(row=5, column=0, sticky=N + W) self.mindimerEntry = Entry(self.filterLF, width=5, text=self.mindimer) self.mindimerEntry.grid(row=5, column=1, sticky=N + W) self.mindimerLbl2 = Label(self.filterLF, text='kcal/mol') self.mindimerLbl2.grid(row=5, column=2, sticky=N + W) self.maxduplex = DoubleVar() self.maxduplex.set(_defaultMaxDuplex) self.maxduplexLbl = Label(self.filterLF, text='Max. Duplex') self.maxduplexLbl.grid(row=6, column=0, sticky=N + W) self.maxduplexEntry = Entry(self.filterLF, width=5, text=self.maxduplex) self.maxduplexEntry.grid(row=6, column=1, sticky=N + W) self.maxduplexLbl2 = Label(self.filterLF, text='kcal/mol') self.maxduplexLbl2.grid(row=6, column=2, sticky=N + W) self.multiexon = BooleanVar() self.multiexon.set(_defaultMultiExon) self.multiexonCb = Checkbutton(self.filterLF, text='Multi-exon', variable=self.multiexon, onvalue=True, offvalue=False) self.multiexonCb.grid(row=7, column=0, sticky=N + W)
def cs_bln(val): bvar = BooleanVar() bvar.set(val) return bvar
class App: def __init__(self, master): pad = 3 frame = Frame(master, padx=10, pady=10) frame.pack() button_dir = Button(frame, text="Set directory", command=self.get_directory) button_dir.grid(row=0, column=0, padx=pad, pady=pad * 2, sticky='E') self.dir = StringVar() self.dir.set("No directory set!") Label(frame, textvariable=self.dir).grid(row=0, column=1, padx=pad, pady=pad, sticky='W') Label(frame, text="Overlay mode:").grid(row=1, column=0, padx=pad, pady=pad, sticky='E') self.mode = StringVar() self.mode.set("transparency") OptionMenu(frame, self.mode, "transparency", "multiply", "darken").grid(row=1, column=1, padx=pad, pady=pad, sticky='W') Label(frame, text="Blend factor:").grid(row=2, column=0, padx=pad, pady=pad, sticky='E') self.mix = DoubleVar() self.mix.set(0.8) Entry(frame, textvariable=self.mix).grid(row=2, column=1, padx=pad, pady=pad, sticky='W') Label(frame, text="Designs per generation:").grid(row=3, column=0, padx=pad, pady=pad, sticky='E') self.gen_size = IntVar() self.gen_size.set(100) Entry(frame, textvariable=self.gen_size).grid(row=3, column=1, padx=pad, pady=pad, sticky='W') Label(frame, text="Use nth generation:").grid(row=4, column=0, padx=pad, pady=pad, sticky='E') self.gen_stride = IntVar() self.gen_stride.set(1) Entry(frame, textvariable=self.gen_stride).grid(row=4, column=1, padx=pad, pady=pad, sticky='W') Label(frame, text="Use nth design:").grid(row=5, column=0, padx=pad, pady=pad, sticky='E') self.des_stride = IntVar() self.des_stride.set(1) Entry(frame, textvariable=self.des_stride).grid(row=5, column=1, padx=pad, pady=pad, sticky='W') Label(frame, text="Make index").grid(row=6, column=0, padx=pad, pady=pad, sticky='E') self.make_index = BooleanVar() self.make_index.set(True) Checkbutton(frame, variable=self.make_index).grid(row=6, column=1, padx=pad, pady=pad, sticky='W') Label(frame, text="Aspect:").grid(row=7, column=0, padx=pad, pady=pad, sticky='E') self.aspect = DoubleVar() self.aspect.set(2.0) Entry(frame, textvariable=self.aspect).grid(row=7, column=1, padx=pad, pady=pad, sticky='W') self.button_run = Button(frame, text="Run", command=self.run_app) self.button_run.grid(row=8, columnspan=2, padx=pad * 2, pady=10) def get_directory(self): self.dir.set( askdirectory(title="Select directory with image files:", mustexist=1)) # self.dir_label.set(self.dir) print self.dir def run_app(self): dir_path = self.dir.get() try: os.listdir(dir_path) except WindowsError: return showerror("Error", "Please select valid directory!") mix = self.mix.get() mode = self.mode.get() gen_size = self.gen_size.get() gen_stride = self.gen_stride.get() des_stride = self.des_stride.get() make_index = self.make_index.get() aspect = self.aspect.get() print dir_path, mix, mode, gen_size, gen_stride, des_stride, make_index, aspect run(dir_path, gen_size, gen_stride, des_stride, mode, make_index, mix, aspect)
def update_plots(widget, baselines, statusbar): try: corr_time, left, right, current, total, \ lag, visibility, phase_fit, delay, phase = client.get_correlation() baseline = left, right phases = angle(visibility) residuals = phases - phase_fit logger.debug('received baseline %s' % repr(baseline)) except NoCorrelations: widget.after(1, update_plots, widget, baselines, statusbar) return if baseline not in baselines.keys(): label_size = 'x-large' corr.axes.grid() corr.axes.set_xlabel('Frequency (MHz)', size=label_size) corr.axes.set_ylabel('Phase (rad)', size=label_size) hist.axes.grid() hist.axes.set_xlabel('Time (local)', size=label_size) hist.axes.set_ylabel('Phase (rad)', size=label_size) lags.axes.grid() lags.axes.set_xlabel('Lag', size=label_size) lags.axes.set_ylabel('Normalized Amplitude', size=label_size) maghist.axes.grid() maghist.axes.set_xlabel('Time (local)', size=label_size) maghist.axes.set_ylabel('Normalized Amplitude (dB)', size=label_size) lags_line = lags.plot( l, abs(lag/norm), '%s-' % colors[current % len(colors)], linewidth=1, label=repr(baseline) )[0] phase_line = corr.plot( f, phases, '%so' % colors[current % len(colors)], linewidth=1, label=repr(baseline) )[0] fit_line = corr.plot( f, phase_fit, '%s-' % colors[current % len(colors)], linewidth=1, label=None )[0] phist_line = hist.plot( datetime.fromtimestamp(corr_time), phase, '%so' % colors[current % len(colors)], linewidth=1, label=None )[0] mag_line = maghist.plot( datetime.fromtimestamp(corr_time), 10*log10(abs(lag/norm).max()), '%s-' % colors[current % len(colors)], linewidth=1, label=None )[0] try: hist.figure.autofmt_xdate() maghist.figure.autofmt_xdate() except: pass baselines[baseline] = lags_line, phase_line, fit_line, phist_line, mag_line statusbar[baseline] = StringVar() Label(master=monitor, textvariable=statusbar[baseline]).pack(fill=BOTH, expand=1) show = BooleanVar() show.set(True) show_baseline[baseline] = show Checkbutton(master=plotting, text='%d-%d'%baseline, variable=show).grid(row=0, column=current) else: for line in baselines[baseline]: line.set_visible(show_baseline[baseline].get()) corr.axes.legend() lags_line, phase_line, fit_line, phist_line, mag_line = baselines[baseline] lags.update_line(lags_line, l, abs(lag/norm)) corr.update_line(phase_line, f, phases) corr.update_line(fit_line, f, phase_fit) hist.update_line(phist_line, datetime.fromtimestamp(corr_time), phase) maghist.update_line(mag_line, datetime.fromtimestamp(corr_time), 10*log10(abs(lag/norm).max())) status = statusbar[baseline] mean = 100*abs(lag).mean()/(2**31) span = 100.*(abs(lag).max() - abs(lag).min())/(2**31) try: snr = 10*log10(abs(lag).max() / abs(lag).mean()) except ZeroDivisionError: snr = inf status.set(u"{0}-{1} SNR {2:.2f} \u03b4{3:.2f} \u2220{4:.2f}\u00b0".format(left, right, snr, delay, phase*(180/pi))) #logger.info('{0}-{1} >> phase={2:8.2f}deg, mean/span={3:.2f}/{4:.2f}'.format(left, right, phase*(180/pi), mean, span)) if current == total-1: widget.update() #root.geometry(window.winfo_geometry()) #root.deiconify() #logger.info('update in') widget.after_idle(update_plots, widget, baselines, statusbar)
class vco_model_win(Toplevel): def __init__(self, parent): Toplevel.__init__(self) img = ImageTk.PhotoImage(file=os.path.join(os.path.dirname(__file__), 'Icons/LMS8001_PLLSim.png')) self.tk.call('wm', 'iconphoto', self._w, img) self.resizable(0, 0) self.parent = parent self.pll = self.parent.pll self.initUI() center_Window(self) self.protocol("WM_DELETE_WINDOW", self.on_Quit) def initUI(self): self.title("LMS8001-PLL-VCO Model Definition") self.style = Style() self.style.theme_use("default") self.columnconfigure(0, pad=1) self.columnconfigure(1, pad=1) self.columnconfigure(2, pad=1) #self.columnconfigure(3, pad=1, weight=1) self.rowconfigure(0, pad=10) self.rowconfigure(1, pad=1, weight=1) self.rowconfigure(2, pad=1, weight=1) self.rowconfigure(3, pad=15, weight=1) self.rowconfigure(4, pad=1, weight=1) self.VCO_EM = BooleanVar() self.VCO_EM.set(self.parent.VCO_EM.get()) self.cbox_vco_em = Checkbutton(self, text='Use EM (RLCK) VCO Model', onvalue=1, offvalue=0, variable=self.VCO_EM, command=self.on_VCO_EM) self.cbox_vco_em.grid(row=0, column=0, columnspan=3, sticky=W) self.radio_fvco = IntVar() self.radio_fvco.set(int(self.parent.VCO_MEAS_FREQ.get())) self.radio_fvco_meas = Radiobutton( self, text='Use Measured VCO Frequency Values in Analysis', variable=self.radio_fvco, value=1) self.radio_fvco_meas.grid(row=1, column=0, columnspan=2, padx=15, sticky=W + N) self.radio_fvco_sim = Radiobutton( self, text='Use Simulated VCO Frequency Values in Analysis', variable=self.radio_fvco, value=0) self.radio_fvco_sim.grid(row=2, column=0, columnspan=2, padx=15, sticky=W + N) buttonFreq = Button(self, text='Plot Freq', command=self.on_FREQ, width=10) buttonFreq.grid(row=3, column=0, sticky=W + E) buttonKVCO = Button(self, text='Plot KVCO', command=self.on_KVCO, width=10) buttonKVCO.grid(row=3, column=1, sticky=W + E) buttonFSTEP = Button(self, text='Plot FSTEP', command=self.on_FSTEP, width=17) buttonFSTEP.grid(row=3, column=2, sticky=W + E) buttonOK = Button(self, text='OK', command=self.on_OK, width=10) buttonOK.grid(row=4, column=0, sticky=W + E) buttonQuit = Button(self, text='Quit', command=self.on_Quit, width=17) buttonQuit.grid(row=4, column=2, sticky=W + E) buttonApply = Button(self, text='Apply', command=self.on_Apply, width=10) buttonApply.grid(row=4, column=1, sticky=W + E) self.on_VCO_EM() #self.pack(fill=BOTH, expand=True) def get_vals(self): if (self.VCO_EM.get()): EM_MODEL = True if (self.radio_fvco.get()): MEAS_FREQ = True else: MEAS_FREQ = False else: EM_MODEL = False MEAS_FREQ = False return (EM_MODEL, MEAS_FREQ) def on_FREQ(self): (EM_MODEL, MEAS_FREQ) = self.get_vals() vco = lms8001_vco(EM_MODEL=EM_MODEL, MEAS_FREQ=MEAS_FREQ) fvco = np.array(np.empty([3, 256])) for sel in range(1, 4): for freq in range(0, 256): fvco[sel - 1, freq] = vco.calcF(sel, freq, 0.6) figure(15) plt1, = plotsig(range(0, 256), fvco[0, :] / 1.0e9, 15, xlabel='$Cap. Bank Code$', ylabel='$F_{VCO} [GHz]$', title='VCO Frequency vs. Cap Bank Code', line_color='black', font_name=self.parent.font_name) plt2, = plotsig(range(0, 256), fvco[1, :] / 1.0e9, 15, xlabel='$Cap. Bank Code$', ylabel='$F_{VCO} [GHz]$', title='VCO Frequency vs. Cap Bank Code', line_color='blue', font_name=self.parent.font_name) plt3, = plotsig(range(0, 256), fvco[2, :] / 1.0e9, 15, xlabel='$Cap. Bank Code$', ylabel='$F_{VCO} [GHz]$', title='VCO Frequency vs. Cap Bank Code', line_color='red', font_name=self.parent.font_name) setlegend(15, [plt1, plt2, plt3], ['VCO_SEL=1', 'VCO_SEL=2', 'VCO_SEL=3'], font_name=self.parent.font_name) show_plots() def on_KVCO(self): (EM_MODEL, MEAS_FREQ) = self.get_vals() vco = lms8001_vco(EM_MODEL=EM_MODEL, MEAS_FREQ=MEAS_FREQ) fvco = np.array(np.empty([3, 256])) NDIV = np.array(np.empty([3, 256])) kvco = np.array(np.empty([3, 256])) for sel in range(1, 4): for freq in range(0, 256): fvco[sel - 1, freq] = vco.calcF(sel, freq, 0.6) kvco[sel - 1, freq] = vco.calcKVCO(sel, freq, 0.6) NDIV[sel - 1, freq] = 1.0 * fvco[sel - 1, freq] / self.pll.Fref for sel in range(1, 4): kvco_avg = 1.0 kvco_over_NDIV_avg = 1.0 for freq in range(0, 256): kvco_avg = kvco_avg * (kvco[sel - 1, freq] / 1.0e6)**(1.0 / 256) kvco_over_NDIV_avg = kvco_over_NDIV_avg * ( (kvco[sel - 1, freq] / 1.0e6) / NDIV[sel - 1, freq])**(1.0 / 256.0) print 'VCO_SEL=%d, KVCO_AVG=%.3f MHz/V, KVCO_over_NDIV_AVG=%.3f MHz/V' % ( sel, kvco_avg, kvco_over_NDIV_avg) print '' figure(16) plt1, = plotsig(fvco[0, :] / 1.0e9, kvco[0, :] / 1.0e6, 16, xlabel='$F_{VCO} [GHz]$', ylabel='$K_{VCO} [MHz/V]$', title='VCO Sensitivity vs. Frequency', line_color='black', font_name=self.parent.font_name) plt2, = plotsig(fvco[1, :] / 1.0e9, kvco[1, :] / 1.0e6, 16, xlabel='$F_{VCO} [GHz]$', ylabel='$K_{VCO} [MHz/V]$', title='VCO Sensitivity vs. Frequency', line_color='blue', font_name=self.parent.font_name) plt3, = plotsig(fvco[2, :] / 1.0e9, kvco[2, :] / 1.0e6, 16, xlabel='$F_{VCO} [GHz]$', ylabel='$K_{VCO} [MHz/V]$', title='VCO Sensitivity vs. Frequency', line_color='red', font_name=self.parent.font_name) setlegend(16, [plt1, plt2, plt3], ['VCO_SEL=1', 'VCO_SEL=2', 'VCO_SEL=3'], font_name=self.parent.font_name) show_plots() def on_FSTEP(self): (EM_MODEL, MEAS_FREQ) = self.get_vals() vco = lms8001_vco(EM_MODEL=EM_MODEL, MEAS_FREQ=MEAS_FREQ) fstep = np.array(np.empty([3, 255])) for sel in range(1, 4): for freq in range(0, 255): fstep[sel - 1, freq] = vco.calcF(sel, freq + 1, 0.6) - vco.calcF( sel, freq, 0.6) figure(17) plt1, = plotsig( range(0, 255), fstep[0, :] / 1.0e6, 17, xlabel='$Cap. Bank Code$', ylabel='$F_{STEP} [MHz/V]$', title='VCO Frequency Step Between Adjacent Tuning Bands', line_color='black', font_name=self.parent.font_name) plt2, = plotsig( range(0, 255), fstep[1, :] / 1.0e6, 17, xlabel='$Cap. Bank Code$', ylabel='$F_{STEP} [MHz/V]$', title='VCO Frequency Step Between Adjacent Tuning Bands', line_color='blue', font_name=self.parent.font_name) plt3, = plotsig( range(0, 255), fstep[2, :] / 1.0e6, 17, xlabel='$Cap. Bank Code$', ylabel='$F_{STEP} [MHz/V]$', title='VCO Frequency Step Between Adjacent Tuning Bands', line_color='red', font_name=self.parent.font_name) setlegend(17, [plt1, plt2, plt3], ['VCO_SEL=1', 'VCO_SEL=2', 'VCO_SEL=3'], font_name=self.parent.font_name) show_plots() def on_VCO_EM(self): if (self.VCO_EM.get()): self.radio_fvco_meas.config(state='enabled') self.radio_fvco_sim.config(state='enabled') else: self.radio_fvco_meas.config(state='disabled') self.radio_fvco_sim.config(state='disabled') def on_OK(self): self.on_Apply() self.on_Quit() def on_Quit(self): self.parent.vco_model_win = None self.destroy() def on_Apply(self): (EM_MODEL, MEAS_FREQ) = self.get_vals() self.parent.VCO_EM.set(EM_MODEL) self.parent.VCO_MEAS_FREQ.set(MEAS_FREQ) self.pll.vco = lms8001_vco(SEL=2, FREQ=128, EM_MODEL=EM_MODEL, MEAS_FREQ=MEAS_FREQ)
class Interface(): def __init__(self, init, speed): self.init_compt = init self.speed = speed self.window = Tk() self.title = self.window.title('IA Minoïde') self.window.geometry('500x200') self.lbl = Label(self.window) self.btn = Button(self.window) self.reinit() self.window.mainloop() def start(self): net = self.NETWORK.get() chk1 = self.chk_state1.get() try: value0 = int(self.txt1.get()) value1 = int(self.txt2.get()) value2 = int(self.txt3.get()) self.terget = [value0, value1, value2] except: #Messagebox.showinfo('Attention/', #'Les valeurs entrées ne sont pas correctes !') return self.txt1.destroy() self.txt2.destroy() self.txt3.destroy() self.chk0.destroy() self.chk1.destroy() self.res = 'Coordonnées cible: ('\ + str(value0) + ', ' + str(value1)\ +", "+ str(value2) + ')' #robot = VrepPioneerSimulation() robot = Pioneer(rospy) HL_size = 10 # nbre neurons of Hiden layer network = NN(3, HL_size, 2) self.trainer = OnlineTrainer(robot, network) if net: with open('last_w.json') as fp: json_obj = json.load(fp) for i in range(3): for j in range(HL_size): network.wi[i][j] = json_obj["input_weights"][i][j] for i in range(HL_size): for j in range(2): network.wo[i][j] = json_obj["output_weights"][i][j] print('Check 0 True') else: print('Check 0 False') if chk1: print('Check 1 True') thread = threading.Thread(target=self.trainer.train, args=(self.terget, )) thread.start() else: print('Check 1 False') if net: self.window.after(1, self.loop) else: self.window.after(1, self.save_file) def save_file(self): self.txt = Entry(self.window, width=30) self.lbl.config(text='Give a name to the log file (default to last):') self.btn.config(text='Valider', command=self.loop) self.txt.grid(column=0, row=1) self.lbl.grid(column=0, row=0) self.btn.grid(column=0, row=2) try: self.file_name = self.txt.get() except: """Messagebox.showinfo('Attention/', "Le nom de fichier n'est pas correct")""" if self.file_name == '': self.file_name = 'last' with open("logs/" + self.file_name + ".json", 'w') as f: print(self.trainer.log_file) json.dump(self.trainer.log_file, f) f.close() print('Graph values have been saved in ' + self.file_name + '.json file') def loop(self): self.lbl.config(text=self.res) self.btn.config(text='Stop', command=self.stop) try: self.txt.destroy() except: pass if self.arret == 1: self.arret = 0 self.lbl.config(text='Arrêt') self.btn.config(text='Réinitialiser', command=self.reinit) return if self.compt <= 0: self.lbl.config(text='Time is over !') self.btn.config(text='Réinitialiser', command=self.reinit) return self.compt -= self.speed / 100 self.window.after(1, self.loop) def stop(self): self.arret = 1 def reinit(self): self.arret = 0 self.compt = self.init_compt self.lbl.config(text='Saisissez les coordonnées:', bg="blue", fg="white", width=20) self.lbl.grid(column=0, row=0) self.txt1Lbl = Label(self.window) self.txt1 = Entry(self.window, width=3) self.txt2 = Entry(self.window, width=3) self.txt3 = Entry(self.window, width=3) self.txt1Lbl.config(text='X', bg="red", fg="white", width=3) self.txt1Lbl.grid(column=0, row=1) #self.lbl.pack() #self.txt1Lbl.pack() self.txt1.grid(column=1, row=1) self.txt2.grid(column=1, row=2) self.txt3.grid(column=1, row=3) self.NETWORK = BooleanVar() self.chk_state1 = BooleanVar() self.NETWORK.set(False) self.chk_state1.set(False) #set check state self.chk0 = Checkbutton(self.window, text='Load previous network', var=self.NETWORK) self.chk1 = Checkbutton(self.window, text='Learn', var=self.chk_state1) self.chk0.grid(column=2, row=1) self.chk1.grid(column=2, row=2) self.btn.config(text='Lancer', command=self.start) self.btn.grid(column=0, row=4)
class FileNamePurifierGUI(Frame): appWidth = 480 appHeight = 360 """ TODO: add "old separators" menu (possibly including camelCase and custom) if(camelCase or custom): add logic in Parser add "preserve text" box to prevent wiping of '.' from names when needed add logic to make the separators exclusive add logic to allow the use of camelCase as a separator """ #important instance variables: """ Separators: self.spacesButton self.underscoresButton self.camelcaseButton self.finalCustomSeparator self.periodButton """ """ break up by: self.breakUpByBraces self.breakUpByParens self.breakUpByBrackets self.breakUpByCamelCase """ """ append to: self.finalAppendToFrontText self.finalAppendToEndText """ """ misc: self.affectSubfolders self.cleanFolderNames self.finalRemoveFirstInstanceText """ """ #newSeparator is a string because self.finalCustomSeparator is a string newSeparator = " " if(self.underscoresButton.get()): newSeparator = "_" elif(self.camelcaseButton.get()): pass elif(len(self.finalCustomSeparator) > 0): newSeparator = self.finalCustomSeparator elif(self.periodButton.get()): newSeparator = "." parser = Parser(self.finalAppendToFrontText, self.finalAppendToEndText, [self.finalRemoveFirstInstanceText], [], [], [' ', '_', '.'], newSeparator, self.breakUpByBraces, self.breakUpByParens, self.breakUpByBrackets, self.breakUpByCamelCase, ) """ def __init__(self, parent, width, height): Frame.__init__(self, parent) self.appWidth = width self.appHeight = height self.parent = parent self.initUI() self.centerWindow() self.dir_opt = {} self.finalAppendToEndText = "" self.finalAppendToFrontText = "" self.finalRemoveFirstInstanceText = "" def askDirectory(self): self.addDirectoryText(askdirectory(**self.dir_opt).rstrip('\r\n')) def addDirectoryText(self, stringToAdd): self.directoryText.config(state = NORMAL) self.directoryText.delete("0.0", END) self.directoryText.insert("0.0", stringToAdd.rstrip('\r\n')) self.directoryText.config(state = DISABLED) def GetNewSeparator(self): newSeparator = "" if(self.spacesButton.get()): newSeparator = " "; elif(self.underscoresButton.get()): newSeparator = "_"; elif(self.camelcaseButton.get()): #TODO: implement seperate by camelcase pass elif(self.periodButton.get()): newSeparator = "." elif(len(self.finalCustomSeparator) > 0): newSeparator = self.finalCustomSeparator return newSeparator def ReadOldSeparatorList(self): oldSeparatorList = [] if(self.oldSpacesButton.get()): oldSeparatorList.append(" ") if(self.oldUnderscoresButton.get()): oldSeparatorList.append("_") if(self.oldPeriodButton.get()): oldSeparatorList.append(".") return oldSeparatorList def CreatePurifierForOptions(self): purifier = FileNamePurifier(self.finalAppendToFrontText, self.finalAppendToEndText, [self.finalRemoveFirstInstanceText], [], [], self.ReadOldSeparatorList(), self.GetNewSeparator(), self.breakUpByBraces.get(), self.breakUpByParens.get(), self.breakUpByBrackets.get(), self.breakUpByCamelCase.get(), self.oldCamelcaseButton.get(), self.camelcaseButton.get()) return purifier def purifyFiles(self): if(len(self.directoryText.get("0.0", END)) > 0): selectorAndPurifier = FileSelectorAndPurifier(self.affectSubfolders.get(), self.cleanFolderNames.get(), self.directoryText.get("0.0", END), self.CreatePurifierForOptions()) tkMessageBox.showinfo("FileNamePurifier", "Purifying FileNames. Please Wait.") selectorAndPurifier.PurifyFileNames() tkMessageBox.showinfo("FileNamePurifier", "FileName Purification Complete!") def CreateOldSeparatorMenu(self): self.oldSeparatorMenu = Menu(self.optionsMenu, tearoff=0) self.oldSpacesButton = BooleanVar() self.oldUnderscoresButton = BooleanVar() self.oldCamelcaseButton = BooleanVar() self.oldPeriodButton = BooleanVar() self.oldSeparatorMenu.add_checkbutton(label="Spaces", onvalue=True, offvalue=False, variable=self.oldSpacesButton) self.oldSpacesButton.set(True) self.oldSeparatorMenu.add_checkbutton(label="Underscores", onvalue=True, offvalue=False, variable=self.oldUnderscoresButton) self.oldUnderscoresButton.set(True) #self.oldSeparatorMenu.add_command(label="Custom Separator", command=self.customSeparatorFrame) self.oldSeparatorMenu.add_checkbutton(label="CamelCase", onvalue=True, offvalue=False, variable=self.oldCamelcaseButton) self.oldSeparatorMenu.add_checkbutton(label="Period", onvalue=True, offvalue=False, variable=self.oldPeriodButton) self.optionsMenu.add_cascade(label="Old Separator", menu=self.oldSeparatorMenu) def addSubMenus(self): self.CreateOldSeparatorMenu() self.createNewSeparatorMenu() self.addSubCheckbuttons() self.createBreakUpByMenu() self.createAppendTextMenu() self.optionsMenu.add_command(label="Remove First Instance Of", command=self.removeFirstInstanceFrame) def submitRemoveFirstInstanceText(self): self.finalRemoveFirstInstanceText = self.removeFirstInstanceText.get("0.0", END) def removeFirstInstanceFrame(self): root = Tk() removeFirstInstanceFrame = Frame(root) removeFirstInstanceFrame.pack(fill=BOTH, expand=1) self.removeFirstInstanceText = Text(removeFirstInstanceFrame) self.removeFirstInstanceText.config(width = 80, height = 1) self.removeFirstInstanceText.pack() removeFirstButton = Button(removeFirstInstanceFrame, text="Submit", command=self.submitRemoveFirstInstanceText) removeFirstButton.pack() root.title("Enter text to remove the first instance of: ") root.mainloop() def submitAppendToFrontText(self): self.finalAppendToFrontText = self.appendToFrontText.get("0.0", END) def appendToFrontFrame(self): root = Tk() frame= Frame(root) frame.pack(fill=BOTH, expand=1) self.appendToFrontText = Text(frame) self.appendToFrontText.config(width = 80, height = 1) self.appendToFrontText.pack() submitButton = Button(frame, text="Submit", command=self.submitAppendToFrontText) submitButton.pack() root.title("Enter text to append to the front: ") root.mainloop() def submitAppendToEndText(self): self.finalAppendToEndText = self.appendToEndText.get("0.0", END) def appendToEndFrame(self): root = Tk() frame= Frame(root) frame.pack(fill=BOTH, expand=1) self.appendToEndText = Text(frame) self.appendToEndText.config(width = 80, height = 1) self.appendToEndText.pack() submitButton = Button(frame, text="Submit", command=self.submitAppendToEndText) submitButton.pack() root.title("Enter text to append to the end: ") root.mainloop() def createAppendTextMenu(self): self.appendText = Menu(self.optionsMenu, tearoff=0) self.appendText.add_command(label="Append To Front", command=self.appendToFrontFrame) self.appendText.add_command(label="Append To End", command=self.appendToEndFrame) self.optionsMenu.add_cascade(label="Append Text", menu=self.appendText) def createBreakUpByMenu(self): self.delimitersMenu = Menu(self.optionsMenu, tearoff=0) self.breakUpByBraces = BooleanVar() self.breakUpByParens = BooleanVar() self.breakUpByBrackets = BooleanVar() self.breakUpByCamelCase = BooleanVar() self.breakUpByParens.set(True) self.breakUpByBrackets.set(True) self.delimitersMenu.add_checkbutton(label="Braces", onvalue=True, offvalue=False, variable=self.breakUpByBraces) self.delimitersMenu.add_checkbutton(label="Parentheses", onvalue=True, offvalue=False, variable=self.breakUpByParens) self.delimitersMenu.add_checkbutton(label="Brackets", onvalue=True, offvalue=False, variable=self.breakUpByBrackets) self.delimitersMenu.add_checkbutton(label="CamelCase", onvalue=True, offvalue=False, variable=self.breakUpByCamelCase) self.optionsMenu.add_cascade(label="Delimiters", menu=self.delimitersMenu) def submitCustomSeparator(self): self.finalCustomSeparator = self.customSeparator.get("0.0", END) def customSeparatorFrame(self): root = Tk() frame= Frame(root) frame.pack(fill=BOTH, expand=1) self.customSeparator = Text(frame) self.customSeparator.config(width = 80, height = 1) self.customSeparator.pack() submitButton = Button(frame, text="Submit", command=self.submitCustomSeparator) submitButton.pack() root.title("Enter a custom separator:") root.mainloop() def ToggleNonUnderscoresOff(self): self.spacesButton.set(False) self.camelcaseButton.set(False) self.periodButton.set(False) def ToggleNonSpacesOff(self): self.underscoresButton.set(False) self.camelcaseButton.set(False) self.periodButton.set(False) def ToggleNonCamelCaseOff(self): self.spacesButton.set(False) self.underscoresButton.set(False) self.periodButton.set(False) def ToggleNonPeriodOff(self): self.spacesButton.set(False) self.camelcaseButton.set(False) self.underscoresButton.set(False) def createNewSeparatorMenu(self): self.newSeparatorMenu = Menu(self.optionsMenu, tearoff=0) self.spacesButton = BooleanVar() self.underscoresButton = BooleanVar() self.camelcaseButton = BooleanVar() self.periodButton = BooleanVar() self.newSeparatorMenu.add_checkbutton(label="Spaces", onvalue=True, offvalue=False, variable=self.spacesButton, command=self.ToggleNonSpacesOff) self.spacesButton.set(True) self.newSeparatorMenu.add_checkbutton(label="Underscores", onvalue=True, offvalue=False, variable=self.underscoresButton, command=self.ToggleNonUnderscoresOff) self.newSeparatorMenu.add_command(label="Custom Separator", command=self.customSeparatorFrame) self.newSeparatorMenu.add_checkbutton(label="CamelCase", onvalue=True, offvalue=False, variable=self.camelcaseButton, command=self.ToggleNonCamelCaseOff) self.newSeparatorMenu.add_checkbutton(label="Period", onvalue=True, offvalue=False, variable=self.periodButton, command=self.ToggleNonPeriodOff) self.optionsMenu.add_cascade(label="New Separator", menu=self.newSeparatorMenu) def addSubCheckbuttons(self): self.affectSubfolders = BooleanVar() self.cleanFolderNames = BooleanVar() self.optionsMenu.add_checkbutton(label="Affect Subfolders", onvalue=True, offvalue=False, variable=self.affectSubfolders) self.optionsMenu.add_checkbutton(label="Clean Folder Names", onvalue=True, offvalue=False, variable=self.cleanFolderNames) self.affectSubfolders.set(True) self.cleanFolderNames.set(True) def initUI(self): self.parent.title("Filename Purifier") self.pack(fill=BOTH, expand=1) self.directoryButton = Button(self, text="Choose Directory", command=self.askDirectory) self.directoryButton.place(x = self.appWidth/3, y = 70) self.directoryText = Text() self.directoryText.config(width = 40, height = 1) self.directoryText.config(state = DISABLED) self.directoryText.place(x = 100, y = 120) self.purifyButton = Button(self, text="Purify Files", command=self.purifyFiles) self.purifyButton.place(x = self.appWidth/3 + 25, y = 170) self.menubar = Menu(self) self.optionsMenu = Menu(self.menubar, tearoff=0) self.addSubMenus() self.menubar.add_cascade(label="Options", menu=self.optionsMenu) self.parent.config(menu=self.menubar) def centerWindow(self): screenWidth = self.parent.winfo_screenwidth() screenHeight = self.parent.winfo_screenheight() x = (screenWidth - self.appWidth)/2 y = (screenHeight - self.appHeight)/2 self.parent.geometry('%dx%d+%d+%d' % (self.appWidth, self.appHeight, x, y))
class FontChooser(ttkSimpleDialog.Dialog): BASIC = 1 ALL = 2 def __init__(self, parent, defaultfont=None, showstyles=None): self._family = StringVar(value="Century Schoolbook L") self._sizeString = StringVar(value="20") self._weight = StringVar(value=tkFont.NORMAL) self._slant = StringVar(value=tkFont.ROMAN) self._isUnderline = BooleanVar(value=False) self._isOverstrike = BooleanVar(value=False) if defaultfont: self._initialize(defaultfont) self._currentFont = tkFont.Font(font=self.getFontTuple()) self._showStyles = showstyles self.sampleText = None ttkSimpleDialog.Dialog.__init__(self, parent, "Font Chooser") def _initialize(self, aFont): if not isinstance(aFont, tkFont.Font): aFont = tkFont.Font(font=aFont) fontOpts = aFont.actual() self._family.set(fontOpts["family"]) self._sizeString.set(fontOpts["size"]) self._weight.set(fontOpts["weight"]) self._slant.set(fontOpts["slant"]) self._isUnderline.set(fontOpts["underline"]) self._isOverstrike.set(fontOpts["overstrike"]) def body(self, master): theRow = 0 ttkLabel(master, text="Font Family").grid(row=theRow, column=0) ttkLabel(master, text="Font Size").grid(row=theRow, column=2) theRow += 1 # Font Families fontList = ttk.Combobox(master, height=10, textvariable=self._family) fontList.grid(row=theRow, column=0, columnspan=2, sticky=N + S + E + W, padx=10) rawfamilyList = list(tkFont.families()) rawfamilyList.sort() # print rawfamilyList familyList = [] for family in rawfamilyList: if family[0] == "@": continue familyList.append(family) fontList.configure(values=familyList) fontList.bind("<<ComboboxSelected>>", self.selectionChanged) # Font Sizes sizeList = ttk.Combobox(master, height=10, width=5, textvariable=self._sizeString) sizeList.grid(row=theRow, column=2, columnspan=2, sticky=N + S + E + W, padx=10) sizes = [] for size in xrange(10, 50): sizes.append(str(size)) sizeList.configure(values=sizes) sizeList.bind("<<ComboboxSelected>>", self.selectionChanged) # Styles if self._showStyles is not None: theRow += 1 if self._showStyles in (FontChooser.ALL, FontChooser.BASIC): ttkLabel(master, text="Styles", anchor=W).grid(row=theRow, column=0, pady=10, sticky=W) theRow += 1 ttkCheckbutton( master, text="bold", command=self.selectionChanged, offvalue="normal", onvalue="bold", variable=self._weight, ).grid(row=theRow, column=0) ttkCheckbutton( master, text="italic", command=self.selectionChanged, offvalue="roman", onvalue="italic", variable=self._slant, ).grid(row=theRow, column=1) if self._showStyles == FontChooser.ALL: ttkCheckbutton( master, text="underline", command=self.selectionChanged, offvalue=False, onvalue=True, variable=self._isUnderline, ).grid(row=theRow, column=2) ttkCheckbutton( master, text="overstrike", command=self.selectionChanged, offvalue=False, onvalue=True, variable=self._isOverstrike, ).grid(row=theRow, column=3) # Sample Text theRow += 1 ttkLabel(master, text="Sample Text", anchor=W).grid(row=theRow, column=0, pady=10, sticky=W) theRow += 1 self.sampleText = Text(master, height=11, width=70) self.sampleText.insert(INSERT, "ABC...XYZ\nabc....xyz", "fontStyle") self.sampleText.config(state=DISABLED) self.sampleText.tag_config("fontStyle", font=self._currentFont) self.sampleText.grid(row=theRow, column=0, columnspan=4, padx=10) def apply(self): self.result = self.getFontTuple() def selectionChanged(self, something=None): self._currentFont.configure( family=self._family.get(), size=self._sizeString.get(), weight=self._weight.get(), slant=self._slant.get(), underline=self._isUnderline.get(), overstrike=self._isOverstrike.get(), ) if self.sampleText: self.sampleText.tag_config("fontStyle", font=self._currentFont) def getFontString(self): family = self._family.get() size = int(self._sizeString.get()) styleList = [] if self._weight.get() == tkFont.BOLD: styleList.append("bold") if self._slant.get() == tkFont.ITALIC: styleList.append("italic") if self._isUnderline.get(): styleList.append("underline") if self._isOverstrike.get(): styleList.append("overstrike") if len(styleList) == 0: return family + " " + str(size) else: xx = "" for x in styleList: xx = xx + " " + x return family + " " + str(size) + " " + xx def getFontTuple(self): family = self._family.get() size = int(self._sizeString.get()) styleList = [] if self._weight.get() == tkFont.BOLD: styleList.append("bold") if self._slant.get() == tkFont.ITALIC: styleList.append("italic") if self._isUnderline.get(): styleList.append("underline") if self._isOverstrike.get(): styleList.append("overstrike") if len(styleList) == 0: return family, size else: return family, size, " ".join(styleList)
def gui(): from Tkinter import Tk, Label, Entry, Button, Scale, Checkbutton, W, HORIZONTAL, Frame, StringVar, IntVar, DoubleVar, Radiobutton, BooleanVar, E global root root = Tk() root.wm_title("Compute R_complete") line = 0 global insFile, hklFile, nHKL, nParams, nHKLLabel, fracFree, status, nParamsLabel, nCPU, rCompleteLabel, cycles, lsType, cleanup, nFree, nRunsLabel, mergeCheck, compileMap insFile = StringVar() hklFile = StringVar() nHKL = IntVar() nParams = IntVar() nFree = IntVar() fracFree = DoubleVar() fracFree.set(5.0) nCPU = IntVar() nCPU.set(maxCPU) cycles = IntVar() cycles.set(10) lsType = IntVar() lsType.set(1) cleanup = BooleanVar() cleanup.set(True) mergeCheck = BooleanVar() mergeCheck.set(True) compileMap = BooleanVar() compileMap.set(True) Label(root, text='Instruction File:').grid(row=line, column=0, sticky=E) Entry(root, textvariable=insFile).grid(row=line, column=1) Button(root, text='Browse', command=browseINS).grid(row=line, column=2) line += 1 Label(root, text='Reflection File:').grid(row=line, column=0, sticky=E) Entry(root, textvariable=hklFile).grid(row=line, column=1) Button(root, text='Browse', command=browseHKL).grid(row=line, column=2) line += 1 Checkbutton(root, var=mergeCheck, text='Merge Reflections').grid(row=line, column=1, sticky=W) line += 1 Button(root, text='Load', command=load).grid(row=line, columnspan=3) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='# of reflections:').grid(row=line, sticky=E) nHKLLabel = Label(root, text='???') nHKLLabel.grid(row=line, column=1, sticky=W) line += 1 Label(root, text='# of atoms:').grid(row=line, sticky=E) nParamsLabel = Label(root, text='???') nParamsLabel.grid(row=line, column=1, sticky=W) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='Select Parameters').grid(row=line, column=1) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='# of free reflections:').grid(row=line, sticky=E) nFreeEntry = Entry(root, width=5, textvariable=nFree) nFreeEntry.grid(row=line, column=1, sticky=W) nFreeEntry.bind('<Return>', setScale) nRunsLabel = Label(root, text='# runs') nRunsLabel.grid(row=line, column=2) line += 1 Label(root, text='% of free reflections:').grid(row=line, column=0, sticky=E) w = Scale(root, from_=0.1, to=10.0, resolution=0.1, orient=HORIZONTAL, length=200, var=fracFree, command=percentScale) w.grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Label(root, text='stable <-------------------------------> fast').grid( row=line, column=1, columnspan=2, sticky=W) line += 1 Frame(root, height=10).grid(row=line) line += 1 Label(root, text='Refinement cycles:').grid(row=line, column=0, sticky=E) ls = Scale(root, from_=0, to=50, resolution=1, orient=HORIZONTAL, length=200, var=cycles) ls.grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Label(root, text='fast <--------------------> less model bias').grid( row=line, column=1, columnspan=2, sticky=W) line += 1 Frame(root, height=10).grid(row=line) line += 1 Label(root, text='# of CPUs:').grid(row=line, column=0, sticky=E) ww = Scale(root, from_=1, to=maxCPU, orient=HORIZONTAL, length=200, var=nCPU) ww.grid(row=line, column=1, columnspan=2, sticky=W) line += 1 Label(root, text='Refinement Type:').grid(row=line, column=0, sticky=E) Radiobutton(root, text='CGLS', var=lsType, value=1).grid(row=line, column=1, sticky=W) Radiobutton(root, text='L.S.', var=lsType, value=2).grid(row=line, column=2, sticky=W) line += 1 Frame(root, height=10).grid(row=line) line += 1 Label(root, text='Compile map:').grid(row=line, column=0, sticky=E) Checkbutton(root, var=compileMap).grid(row=line, column=1, sticky=W) line += 1 Label(root, text='Cleanup:').grid(row=line, column=0, sticky=E) Checkbutton(root, var=cleanup).grid(row=line, column=1, sticky=W) line += 1 Button(root, text='RUN', command=run, width=25).grid(row=line, columnspan=3) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='R_complete:').grid(row=line, column=0, sticky=E) rCompleteLabel = Label(root, text='???') rCompleteLabel.grid(row=line, column=1, sticky=W) line += 1 Frame(root, height=20).grid(row=line) line += 1 Label(root, text='Status:').grid(row=line, column=0, sticky=E) status = Label(root, text='Idle... Please load files.') status.grid(row=line, column=1, columnspan=2, sticky=W) global IDLE IDLE = True root.mainloop()
class FontChooser( tkSimpleDialog.Dialog ): BASIC = 1 ALL = 2 def __init__( self, parent, defaultfont=None, showstyles=None ): self._family = StringVar( value='Century Schoolbook L') self._sizeString = StringVar( value='20' ) self._weight = StringVar( value=tkFont.NORMAL ) self._slant = StringVar( value=tkFont.ROMAN ) self._isUnderline = BooleanVar( value=False ) self._isOverstrike = BooleanVar( value=False ) if defaultfont: self._initialize( defaultfont ) self._currentFont = tkFont.Font( font=self.getFontTuple() ) self._showStyles = showstyles self.sampleText = None tkSimpleDialog.Dialog.__init__( self, parent, 'Font Chooser' ) def _initialize( self, aFont ): if not isinstance( aFont, tkFont.Font ): aFont = tkFont.Font( font=aFont ) fontOpts = aFont.actual( ) self._family.set( fontOpts[ 'family' ] ) self._sizeString.set( fontOpts[ 'size' ] ) self._weight.set( fontOpts[ 'weight' ] ) self._slant.set( fontOpts[ 'slant' ] ) self._isUnderline.set( fontOpts[ 'underline' ] ) self._isOverstrike.set( fontOpts[ 'overstrike' ] ) def body( self, master ): theRow = 0 Label( master, text="Font Family" ).grid( row=theRow, column=0 ) Label( master, text="Font Size" ).grid( row=theRow, column=2 ) theRow += 1 # Font Families fontList = ttk.Combobox( master, height=10, textvariable=self._family ) fontList.grid( row=theRow, column=0, columnspan=2, sticky=N+S+E+W, padx=10 ) rawfamilyList = list(tkFont.families( )) rawfamilyList.sort() # print rawfamilyList familyList=[] for family in rawfamilyList: if family[0] == '@': continue familyList.append(family) fontList.configure( values=familyList ) fontList.bind('<<ComboboxSelected>>', self.selectionChanged) # Font Sizes sizeList = ttk.Combobox( master, height=10, width=5, textvariable=self._sizeString ) sizeList.grid( row=theRow, column=2, columnspan=2, sticky=N+S+E+W, padx=10 ) sizes=[] for size in xrange( 10,50 ): sizes.append( str(size) ) sizeList.configure( values=sizes) sizeList.bind('<<ComboboxSelected>>', self.selectionChanged) # Styles if self._showStyles is not None: theRow += 1 if self._showStyles in ( FontChooser.ALL, FontChooser.BASIC ): Label( master, text='Styles', anchor=W ).grid( row=theRow, column=0, pady=10, sticky=W ) theRow += 1 Checkbutton( master, text="bold", command=self.selectionChanged, offvalue='normal', onvalue='bold', variable=self._weight ).grid(row=theRow, column=0) Checkbutton( master, text="italic", command=self.selectionChanged, offvalue='roman', onvalue='italic', variable=self._slant ).grid(row=theRow, column=1) if self._showStyles == FontChooser.ALL: Checkbutton( master, text="underline", command=self.selectionChanged, offvalue=False, onvalue=True, variable=self._isUnderline ).grid(row=theRow, column=2) Checkbutton( master, text="overstrike", command=self.selectionChanged, offvalue=False, onvalue=True, variable=self._isOverstrike ).grid(row=theRow, column=3) # Sample Text theRow += 1 Label( master, text='Sample Text', anchor=W ).grid( row=theRow, column=0, pady=10, sticky=W ) theRow += 1 self.sampleText = Text( master, height=11, width=70 ) self.sampleText.insert( INSERT,'ABC...XYZ\nabc....xyz', 'fontStyle' ) self.sampleText.config( state=DISABLED ) self.sampleText.tag_config( 'fontStyle', font=self._currentFont ) self.sampleText.grid( row=theRow, column=0, columnspan=4, padx=10 ) def apply( self ): self.result = self.getFontTuple( ) def selectionChanged( self, something=None ): self._currentFont.configure( family=self._family.get(), size=self._sizeString.get(), weight=self._weight.get(), slant=self._slant.get(), underline=self._isUnderline.get(), overstrike=self._isOverstrike.get() ) if self.sampleText: self.sampleText.tag_config( 'fontStyle', font=self._currentFont ) def getFontString( self ): family = self._family.get() size = int(self._sizeString.get()) styleList = [ ] if self._weight.get() == tkFont.BOLD: styleList.append( 'bold' ) if self._slant.get() == tkFont.ITALIC: styleList.append( 'italic' ) if self._isUnderline.get(): styleList.append( 'underline' ) if self._isOverstrike.get(): styleList.append( 'overstrike' ) if len(styleList) == 0: return family+ ' ' + str(size) else: xx='' for x in styleList: xx=xx+' '+ x return family + ' ' +str(size) +' '+xx def getFontTuple( self ): family = self._family.get() size = int(self._sizeString.get()) styleList = [ ] if self._weight.get() == tkFont.BOLD: styleList.append( 'bold' ) if self._slant.get() == tkFont.ITALIC: styleList.append( 'italic' ) if self._isUnderline.get(): styleList.append( 'underline' ) if self._isOverstrike.get(): styleList.append( 'overstrike' ) if len(styleList) == 0: return family, size else: return family, size, ' '.join( styleList )
class MenuBar(Menu): def __init__(self, master, visible=True): self.root = master Menu.__init__(self, master.root) self.sc3_plugins = BooleanVar() self.sc3_plugins.set(SC3_PLUGINS) # Set font self.config(font="CodeFont") # File menu filemenu = Menu(self, tearoff=0) filemenu.add_command(label="New Document", command=self.root.newfile, accelerator="Ctrl+N") filemenu.add_command(label="Open", command=self.root.openfile, accelerator="Ctrl+O") filemenu.add_command(label="Save", command=self.root.save, accelerator="Ctrl+S") filemenu.add_command(label="Save As...", command=self.root.saveAs) self.add_cascade(label="File", menu=filemenu) # Edit menu editmenu = Menu(self, tearoff=0) editmenu.add_command(label="Undo", command=self.root.undo, accelerator="Ctrl+Z") editmenu.add_command(label="Redo", command=self.root.redo, accelerator="Ctrl+Y") editmenu.add_separator() editmenu.add_command(label="Cut", command=self.root.edit_cut, accelerator="Ctrl+X") editmenu.add_command(label="Copy", command=self.root.edit_copy, accelerator="Ctrl+C") editmenu.add_command(label="Paste", command=self.root.edit_paste, accelerator="Ctrl+V") editmenu.add_command(label="Select All", command=self.root.selectall, accelerator="Ctrl+A") editmenu.add_separator() editmenu.add_command(label="Increase Font Size", command=self.root.zoom_in, accelerator="Ctrl+=") editmenu.add_command(label="Decrease Font Size", command=self.root.zoom_out, accelerator="Ctrl+-") editmenu.add_separator() editmenu.add_command(label="Toggle Menu", command=self.root.toggle_menu, accelerator="Ctrl+M") self.add_cascade(label="Edit", menu=editmenu) # Code menu codemenu = Menu(self, tearoff=0) codemenu.add_command(label="Evaluate Block", command=self.root.exec_block, accelerator="Ctrl+Return") codemenu.add_command(label="Evaluate Line", command=self.root.exec_line, accelerator="Alt+Return") codemenu.add_command(label="Clear Scheduling Clock", command=self.root.killall, accelerator="Ctrl+.") codemenu.add_separator() codemenu.add_command(label="Toggle Console", command=self.root.toggle_console) codemenu.add_command(label="Export Console Log", command=self.root.export_console) codemenu.add_separator() codemenu.add_checkbutton(label="Use SC3 Plugins", command=self.root.toggle_sc3_plugins, variable=self.sc3_plugins) self.add_cascade(label="Code", menu=codemenu) # Settings ## settingsmenu = Menu(self, tearoff=0) ## settingsmenu.add_command(label="Preferences...", command=self.root.toggleMenu) ## settingsmenu.add_command(label="Change Colours...", command=self.root.toggleMenu) ## settingsmenu.add_command(label="Open Samples Folder", command=self.root.toggleMenu) ## self.add_cascade(label="Settings", menu=settingsmenu) # Help helpmenu = Menu(self, tearoff=0) helpmenu.add_command(label="Visit FoxDot Homepage", command=self.root.openhomepage) helpmenu.add_command(label="Documentation", command=self.root.opendocumentation) self.add_cascade(label="Help", menu=helpmenu) # Add to root self.visible = visible if self.visible: master.root.config(menu=self) def toggle(self): self.root.root.config(menu=self if not self.visible else 0) self.visible = not self.visible return
class ScalePanel(PluginPanel): name='ScaleAndMirror' title = _("Scale and Mirror") def init(self, master): PluginPanel.init(self, master) self.width_priority=1 root=self.mw.root self.var_width=DoubleVar(root) self.var_height=DoubleVar(root) unit='%' jump=5 self.var_proportional = IntVar(root) self.var_proportional.set(0) self.var_basepoint = StringVar(root) self.var_basepoint.set('C') #--------------------------------------------------------- top = TFrame(self.panel, style='FlatFrame') top.pack(side = TOP, fill=BOTH) #--------------------------------------------------------- # Horisontal size size_frameH = TFrame(top, style='FlatFrame', borderwidth=3) size_frameH.pack(side = TOP, fill = BOTH) label = TLabel(size_frameH, style='FlatLabel', image='size_h') label.pack(side = LEFT, padx=5) self.entry_width = TSpinbox(size_frameH, var=100, vartype=1, textvariable = self.var_width, min = -30000, max = 30000, step = jump, width = 6, command=self.apply_scale) self.entry_width.pack(side = LEFT) self.entry_width.down_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.down_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.up_button.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<ButtonRelease>', self.entry_width_chang) self.entry_width.entry.bind('<KeyRelease>', self.entry_width_chang) self.entry_width.entry.bind('<FocusOut>', self.entry_width_chang) self.entry_width.entry.bind('<FocusIn>', self.entry_width_FocusIn) self.labelwunit = TLabel(size_frameH, style='FlatLabel', text = unit) self.labelwunit.pack(side = LEFT, padx=5) self.hflip=BooleanVar(root) self.hflip.set(0) button = TCheckbutton(size_frameH, image = "pstrip_hflip", style='ToolBarCheckButton', variable = self.hflip, command = None) button.pack(side = LEFT) #--------------------------------------------------------- # Vertical size_frameV = TFrame(top, style='FlatFrame', borderwidth=3) size_frameV.pack(side = TOP, fill = BOTH) label = TLabel(size_frameV, style='FlatLabel', image='size_v') label.pack(side = LEFT, padx=5) self.entry_height = TSpinbox(size_frameV, var=100, vartype=1, textvariable = self.var_height, min = -30000, max = 30000, step = jump, width = 6, command=self.apply_scale) self.entry_height.pack(side = LEFT) self.entry_height.down_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.down_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.up_button.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<ButtonRelease>', self.entry_height_chang) self.entry_height.entry.bind('<KeyRelease>', self.entry_height_chang) self.entry_height.entry.bind('<FocusOut>', self.entry_height_chang) self.entry_height.entry.bind('<FocusIn>', self.entry_height_FocusIn) self.labelhunit = TLabel(size_frameV, style='FlatLabel', text = unit) self.labelhunit.pack(side = LEFT, padx=5) self.vflip=BooleanVar(root) self.vflip.set(0) button = TCheckbutton(size_frameV, image = "pstrip_vflip", style='ToolBarCheckButton', variable = self.vflip, command = None) button.pack(side = LEFT) #--------------------------------------------------------- # Proportional chek self.proportional_check = TCheckbutton(top, text = _("Proportional"), variable = self.var_proportional, command = self.proportional) self.proportional_check.pack(side = TOP, anchor=W, padx=5,pady=5) #--------------------------------------------------------- # Basepoint check label = TLabel(top, style='FlatLabel', text = _("Basepoint:")) label.pack(side = TOP, fill = BOTH, padx=5) basepoint_frame=TLabelframe(top, labelwidget=label, style='Labelframe', borderwidth=4) basepoint_frame.pack(side = TOP, fill=X, padx=5, pady=2) self.Basepoint = BasePointSelector(basepoint_frame, anchor=self.var_basepoint) self.Basepoint.pack(side = LEFT, fill = BOTH, padx=5) label = TLabel(basepoint_frame, style='FlatLabel', image = 'coordinate_sys') label.pack(side = LEFT, fill = BOTH, padx=10) #--------------------------------------------------------- # Button frame button_frame = TFrame(top, style='FlatFrame', borderwidth=5) button_frame.pack(side = BOTTOM, fill = BOTH) self.update_buttons = [] self.button = UpdatedButton(top, text = _("Apply"), command = self.apply_scale) self.button.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X, pady=3) self.button_copy = UpdatedButton(top, text = _("Apply to Copy"), command = self.apply_to_copy) self.button_copy.pack(in_ = button_frame, side = BOTTOM, expand = 1, fill = X) self.init_from_doc() self.subscribe_receivers() ############################################################################### def subscribe_receivers(self): self.document.Subscribe(SELECTION, self.Update) def unsubscribe_receivers(self): self.document.Unsubscribe(SELECTION, self.Update) def init_from_doc(self, *arg): self.Update() def Update(self, *arg): if self.is_selection(): self.entry_width.set_state(NORMAL) self.entry_height.set_state(NORMAL) self.proportional_check['state']=NORMAL self.button['state']=NORMAL self.button_copy['state']=NORMAL else: self.entry_width.set_state(DISABLED) self.entry_height.set_state(DISABLED) self.proportional_check['state']=DISABLED self.button['state']=DISABLED self.button_copy['state']=DISABLED def entry_width_FocusIn(self, *arg): self.width_priority=1 def entry_height_FocusIn(self, *arg): self.width_priority=0 def ScaleSelected(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale") if self.document.selection: self.document.begin_transaction(text) try: try: br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom if cnt_x is None: cnt_x=hor_sel/2+br.left if cnt_y is None: cnt_y=ver_sel/2+br.bottom trafo = Trafo(h, 0, 0, v, cnt_x-cnt_x*h, cnt_y-cnt_y*v) self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def ScaleAndCopy(self, h, v, cnt_x=None, cnt_y=None): text = _("Scale&Copy") if self.document.selection: self.document.begin_transaction(text) try: try: br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom if cnt_x is None: cnt_x=hor_sel/2+br.left if cnt_y is None: cnt_y=ver_sel/2+br.bottom trafo = Trafo(h, 0, 0, v, cnt_x-cnt_x*h, cnt_y-cnt_y*v) self.document.ApplyToDuplicate() self.document.TransformSelected(trafo, text) except: self.document.abort_transaction() finally: self.document.end_transaction() def entry_height_chang(self, *arg): if self.var_proportional.get(): self.var_width.set(self.var_height.get()) def entry_width_chang(self, *arg): if self.var_proportional.get(): self.var_height.set(self.var_width.get()) def proportional(self): if self.width_priority: self.entry_width_chang() else: self.entry_height_chang() def apply_scale(self, *arg): if self.button["state"]==DISABLED: return self.proportional() width=self.var_width.get() height=self.var_height.get() br=self.document.selection.coord_rect hor_sel=br.right - br.left ver_sel=br.top - br.bottom cnt_x,cnt_y=self.Basepoint.get_basepoint(hor_sel,ver_sel,br.left,br.bottom) h=width/100 if h==0: h=1 if self.hflip.get(): h=-1*h v=height/100 if v==0: v=1 if self.vflip.get(): v=-1*v if arg and arg[0] == 'Duplicate': self.ScaleAndCopy(h, v, cnt_x, cnt_y) else: self.ScaleSelected(h, v, cnt_x, cnt_y) def apply_to_copy(self): self.apply_scale('Duplicate') def is_selection(self): return (len(self.document.selection) > 0)