def __init__(self, root): """ Constructor of Config :param root: root Tk object :type root: Tk """ super().__init__(root) self.root = root self.geometry("350x300") self.geometry("+%d+%d" % (root.winfo_x()+50, root.winfo_y()+25)) self.minsize(350, 300) self.wm_title("Tramet - Settings") self.conf = Config.load_file() def save(event=None): root.buffer_size = buf.get() * 1024 * 1024 self.conf["buffer_size"] = buf.get() * 1024 * 1024 self.destroy() buf = IntVar() buf.set(self.conf.get("buffer_size", 10*1024*1024) // 1024 // 1024) Label(self, text="File Buffer size (MB): ").grid(row=0, column=0, padx=(10, 0), pady=(10, 20)) s = Spinbox(self, from_=1, to=999, textvariable=buf) s.grid(row=0, column=1) f = Frame(self) f.grid(row=1, column=0, columnspan=2, sticky=E) ok = Button(f, text="OK", command=save) ok.pack(side=RIGHT, padx=10, pady=10) cancel = Button(f, text="Cancel", command=self.destroy) cancel.pack(side=RIGHT, padx=10, pady=10)
def __init__(self,app): info( ' - initializing module: Spectrogram' ) self.app = app self.frame = Frame(self.app.BOTTOM) self.frame.grid( row=0, column=1, pady=(self.app.pady*2,self.app.pady/2) ) self.axis_frame = Frame(self.app.BOTTOM) self.axis_frame.grid( row=0, column=0, sticky='e', pady=(self.app.pady*2,self.app.pady/2) ) self.canvas_width = self.app.TextGrid.canvas_width self.canvas_height = 106 self.canvas = Canvas(self.frame, width=self.canvas_width, height=self.canvas_height, background='gray', highlightthickness=0) self.spectrogram = None self.spec_freq_max = DoubleVar() self.wl = DoubleVar() self.dyn_range = DoubleVar() self.clicktime = -1 self.specClick = False self.oldSelected = None self.doDefaults() #make spinboxes & buttons for spectrogram specs self.spinwin = Frame(self.axis_frame) #spinboxes axis_ceil_box = Spinbox(self.spinwin, textvariable=self.spec_freq_max, command=self.drawSpectrogram, width=7, increment=100, from_=0, to_=100000) axis_ceil_box.bind('<Return>',self.drawSpectrogram) axis_ceil_box.bind('<Escape>',lambda ev: self.spinwin.focus()) wl_box = Spinbox(self.spinwin, textvariable=self.wl, command=self.drawSpectrogram, width=7, increment=0.0005, from_=0, to_=1) wl_box.bind('<Return>',self.drawSpectrogram) wl_box.bind('<Escape>',lambda ev: self.spinwin.focus()) dyn_range_box = Spinbox(self.spinwin, textvariable=self.dyn_range, command=self.drawSpectrogram, width=7, increment=10, from_=0, to_=10000) dyn_range_box.bind('<Return>',self.drawSpectrogram) dyn_range_box.bind('<Escape>',lambda ev: self.spinwin.focus()) #buttons default_btn = Button(self.spinwin, text='Standards', command=self.restoreDefaults, takefocus=0) apply_btn = Button(self.spinwin, text='Apply', command=self.drawSpectrogram, takefocus=0, width=6) # self.axis_frame.create_window(wwidth,self.canvas_height, window=self.spinwin, anchor='ne') #grid spinboxes & buttons on subframe axis_ceil_box.grid(row=0, columnspan=2, sticky='ne') wl_box.grid(row=1, columnspan=2, sticky='ne') dyn_range_box.grid(row=2, columnspan=2, sticky='ne') default_btn.grid(row=3) apply_btn.grid(row=3, column=1) self.grid() self.canvas.bind('<Button-1>', self.jumpToFrame)
# Отобразить лого (Sale New) if_create_logo_text = Label(window, text='Отображать SALE NEW') if_create_logo = Combobox(window) if_create_logo['value'] = ("Отобразить", "Не отображать") if_create_logo.current(1) if_create_logo_text.grid(column=0, row=5, sticky=W, padx=10, pady=10) if_create_logo.grid(column=1, row=5, sticky=W, padx=10, pady=10) # Надбавка var_r = IntVar() var_r.set(0) if_price_resize_text = Label(window, text="Надбавка") if_price_resize = Spinbox(window, from_=0, to=100, width=5, textvariable=var_r) if_price_resize_text.grid(column=0, row=6, sticky=W, padx=10, pady=10) if_price_resize.grid(column=1, row=6, sticky=W, padx=10, pady=10) # Множитель курса price_resize_text = Label(window, text="Множитель курса") price_resize = Spinbox(window, from_=0, to=100, format="%10.2f", increment=0.01, width=7) price_resize.set('{:10.2f}'.format(1)) price_resize_text.grid(column=0, row=7, sticky=W, padx=10, pady=10) price_resize.grid(column=1, row=7, sticky=W, padx=10, pady=10) # Отображение Валюты if_price = Label(window, text='Отобразить валюту')
connected = False root.destroy() cb_ports.grid(column=0, row=0, sticky='W') btn_start_stop.grid(column=1, row=0) lb_bauderates.grid(column=2, row=0) cb_bauderates.grid(column=3, row=0) frame_choose_port.grid(column=0, row=0, columnspan=4, sticky='W') txt_logs.grid(column=0, row=0) frame_view_log.grid(column=0, row=1, sticky='NSEW') lbframe_parity.grid(column=0, row=0, sticky='WE') lbframe_databits.grid(column=0, row=1, sticky='WE') lbframe_stopbits.grid(column=0, row=2, sticky='WE') lbframe_hwflowcontrol.grid(column=0, row=3, sticky='WE') lbframe_xonxoff.grid(column=0, row=4, sticky='WE') lbframe_trail.grid(column=0, row=5, sticky='WE') action_clear.grid(column=0, row=6, sticky='WS') frame_choose_options.grid(column=1, row=1, sticky='NEWS') txt_send_command.grid(column=0, row=0, sticky='EW') btn_send_command.grid(column=1, row=0, sticky='E') sp_timeout.grid(column=2, row=0, sticky='E') frame_sendto_port.grid(column=0, row=3, columnspan=2, sticky='W') root.protocol("WM_DELETE_WINDOW", on_close) root.mainloop()
('pressed', 'arrspd-p'), ('active', 'arrspd-h'), { 'sticky': 'e', 'border': [0], 'padding': 4 } # 'border': [1] ) }, "Spinbox.uparrow": { "element create": ("image", 'arrspu-n', ('disabled', 'arrspu-d'), ('pressed', 'arrspu-p'), ('active', 'arrspu-h'), { 'sticky': 'e', 'border': [0], 'padding': 4 }) } # end of theme extract - don't forget to add comma at end when inserting }) style.theme_use('yummy') # 'alt' widg = Spinbox(fr, from_=0, to=100, width=4) widg.grid(column=0, row=10, padx=5, pady=5) widg1 = Spinbox(fr, from_=0, to=100) widg1.grid(column=0, row=11, padx=5, pady=5, sticky='ns') run_state(fr, widg, widg1) root.mainloop()
def build(self): """widget construction Parameters ---------- None Results ------- None """ fr4 = LabelFrame(self.fr0, text='hsv') fr4.grid(column=2, row=0) hl = Label(fr4, text='hue ') hl.grid(column=0, row=0, sticky='s') self.hcan = Canvas(fr4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.hcan.grid(column=1, row=0, sticky='s') hsc = TtkScale(fr4, from_=0, to=360, variable=self.hvar, orient='horizontal', length=self.scale_l, command=self.hhandle, tickinterval=30) hsc.grid(column=1, row=1, sticky='nw') vcmdsb = root.register(sb_okay) hsb = Spinbox(fr4, from_=0, to=360, textvariable=self.hvar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 360), command=self.hhandle, width=5) hsb.grid(column=2, row=1, sticky='nw') hsb.bind('<KeyRelease>', self.checksbh) hel = Label(fr4, height=1) hel.grid(column=2, row=2) sl = Label(fr4, text='sat ') sl.grid(column=0, row=3) self.scan = Canvas(fr4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.scan.grid(column=1, row=3, sticky='s') ssc = TtkScale(fr4, from_=0, to=100, variable=self.svar, orient='horizontal', length=self.scale_l, command=self.shandle, tickinterval=10) ssc.grid(column=1, row=4, sticky='nw') ssb = Spinbox(fr4, from_=0, to=100, textvariable=self.svar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 100), command=self.shandle, width=5) ssb.grid(column=2, row=4, sticky='nw') ssb.bind('<KeyRelease>', self.checksb100) sel = Label(fr4, height=1) sel.grid(column=2, row=5) vl = Label(fr4, text='value') vl.grid(column=0, row=6, sticky='s') self.vcan = Canvas(fr4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.vcan.grid(column=1, row=6, sticky='n') vsc = TtkScale(fr4, from_=0, to=100, variable=self.vvar, orient='horizontal', length=self.scale_l, command=self.vhandle, tickinterval=10) vsc.grid(column=1, row=7, sticky='nw') vsb = Spinbox(fr4, from_=0, to=100, textvariable=self.vvar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 100), command=self.vhandle, width=5) vsb.grid(column=2, row=7, sticky='nw') vsb.bind('<KeyRelease>', self.checksb100) vel = Label(fr4, height=1) vel.grid(column=2, row=8) # assume initial setting 0,100,100 hsv to_colour = hsv_to_rgb(*(0, 100, 100)) hue_gradient(self.hcan, width=self.canvas_w) draw_gradient(self.scan, (255, 255, 255), to_colour, width=self.canvas_w) draw_gradient(self.vcan, (0, 0, 0), to_colour, width=self.canvas_w)
def build(self): """widget construction Parameters ---------- None Results ------- None """ fr1 = LabelFrame(self.fr0, text='rgb') fr1.grid(column=0, row=0, sticky='news') rl0 = Label(fr1, text='red ') rl0.grid(column=0, row=0, sticky='s') self.rcan = Canvas(fr1, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.rcan.grid(column=1, row=0, sticky='s') rsc = TtkScale(fr1, from_=0, to=255, variable=self.rvar, orient='horizontal', length=self.scale_l, command=self.rhandle, tickinterval=20) rsc.grid(column=1, row=1, sticky='news') rsb = Spinbox(fr1, from_=0, to=255, textvariable=self.rvar, command=self.rhandle, width=5) rsb.grid(column=2, row=1, sticky='nw') rel = Label(fr1, height=1) rel.grid(column=2, row=2) gl0 = Label(fr1, text='green') gl0.grid(column=0, row=3) self.gcan = Canvas(fr1, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.gcan.grid(column=1, row=3, sticky='s') gsc = TtkScale(fr1, from_=0, to=255, variable=self.gvar, orient='horizontal', length=self.scale_l, command=self.ghandle, tickinterval=20) gsc.grid(column=1, row=4, sticky='news') gsb = Spinbox(fr1, from_=0, to=255, textvariable=self.gvar, command=self.ghandle, width=5) gsb.grid(column=2, row=4, sticky='nw') gel = Label(fr1, height=1) gel.grid(column=2, row=5) bl0 = Label(fr1, text='blue ') bl0.grid(column=0, row=6, sticky='s') self.bcan = Canvas(fr1, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.bcan.grid(column=1, row=6, sticky='n') bsc = TtkScale(fr1, from_=0, to=255, variable=self.bvar, orient='horizontal', length=self.scale_l, command=self.bhandle, tickinterval=20) bsc.grid(column=1, row=7, sticky='news') bsb = Spinbox(fr1, from_=0, to=255, textvariable=self.bvar, command=self.bhandle, width=5) bsb.grid(column=2, row=7, sticky='nw') bel = Label(fr1, height=1) bel.grid(column=2, row=8) fr3 = LabelFrame(self.fr0, text='colour mix') fr3.grid(column=1, row=0, sticky='nw') self.cmcan = cmcan = Canvas(fr3, width=30, height=30, bd=0, highlightthickness=0) cmcan.grid(column=0, row=0, sticky='n', columnspan=2) cmcan.grid_propagate(0) vdraw_gradient(self.cmcan, (255, 0, 0), alpha=255) cml = Label(fr3, text='hash\nvalue') cml.grid(column=0, row=1) ent0 = Entry(fr3, width=8, textvariable=self.evar) ent0.grid(column=1, row=1) fr2 = LabelFrame(self.fr0, text='opacity') fr2.grid(column=0, row=1, sticky='news') al0 = Label(fr2, text='alpha') al0.grid(column=0, row=0, sticky='s') self.acan = Canvas(fr2, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.acan.grid(column=1, row=0, sticky='n') asc = TtkScale(fr2, from_=0, to=255, variable=self.avar, orient='horizontal', length=self.scale_l, command=self.ahandle, tickinterval=20) asc.grid(column=1, row=1, sticky='news') asb = Spinbox(fr2, from_=0, to=255, textvariable=self.avar, command=self.ahandle, width=5) asb.grid(column=2, row=1, sticky='nw') ael = Label(fr2, text=' ', height=1) ael.grid(column=2, row=2, sticky='s') draw_gradient(self.rcan, (0, 0, 0), (255, 0, 0), width=self.canvas_w) draw_gradient(self.gcan, (255, 0, 0), (255, 255, 0), width=self.canvas_w) draw_gradient(self.bcan, (255, 0, 0), (255, 0, 255), width=self.canvas_w) draw_agradient(self.acan, (127, 127, 127), (255, 0, 0), width=self.canvas_w)
class Window: def __init__(self, workstation: WorkstationSettings, wallpaper: Image.Image): self._root = Tk() self._root.title("wallcrop") self._root.minsize(*_MINSIZE) self._show_monitor_labels = BooleanVar(self._root, value=False) self._show_unselected_area = BooleanVar(self._root, value=True) frame = Frame(self._root, padding=_PADDING) frame.grid(column=0, row=0, sticky="n w s e") self._root.columnconfigure(0, weight=1) # type: ignore self._root.rowconfigure(0, weight=1) # type: ignore frame_top = Frame(frame) frame_top.grid(column=0, row=0, sticky="n w s e") frame_bot = Frame(frame) frame_bot.grid(column=0, row=2, sticky="n w s e") self._selection = Selection(aspect_ratio=np.divide(*wallpaper.size)) self._selection.register_onchange_handler(self._reset_spinbox_values) self._selection_widget = SelectionWidget( parent=frame, workstation=workstation, wallpaper=wallpaper, selection=self._selection, ) self._selection_widget.set_show_monitor_labels( self._show_monitor_labels.get()) self._selection_widget.set_show_unselected_area( self._show_unselected_area.get()) self._selection_widget.grid(column=0, row=1, sticky="n w s e", pady=_PADDING) frame.columnconfigure(0, weight=1) # type: ignore frame.rowconfigure(1, weight=1) # type: ignore label_wallpaper = Label(frame_top, text=workstation.name) label_wallpaper.grid(column=0, row=0) # Center columns 1-6 on frame_bot. frame_bot.columnconfigure(0, weight=1) # type: ignore frame_bot.columnconfigure(7, weight=1) # type: ignore # TODO: Figure out how to not have spinbox show zero when using # increment/decrement buttons. label_selection_position_x = Label(frame_bot, text="X: ") label_selection_position_x.grid(column=1, row=0) self._spinbox_selection_position_x = Spinbox(frame_bot, width=5, validate="focusout") self._spinbox_selection_position_x.grid(column=2, row=0) label_selection_position_y = Label(frame_bot, text=" Y: ") label_selection_position_y.grid(column=3, row=0) self._spinbox_selection_position_y = Spinbox(frame_bot, width=5, validate="focusout") self._spinbox_selection_position_y.grid(column=4, row=0) label_selection_zoom = Label(frame_bot, text=" Zoom: ") label_selection_zoom.grid(column=5, row=0) self._spinbox_selection_zoom = Spinbox(frame_bot, width=5, validate="focusout") self._spinbox_selection_zoom.grid(column=6, row=0) self._bind_actions() self._set_up_menubar() self._reset_spinbox_values() def _bind_actions(self) -> None: self._root.bind("<Escape>", lambda _event: self.quit()) self._root.bind("<q>", lambda _event: self.quit()) self._root.bind( "<m>", lambda _event: self._show_monitor_labels.set(not ( self._show_monitor_labels.get())), ) self._root.bind( "<n>", lambda _event: self._show_unselected_area.set(not ( self._show_unselected_area.get())), ) self._root.bind("<i>", lambda _event: self._selection.zoom_increase()) self._root.bind( "<I>", lambda _event: self._selection.zoom_increase(precise=True)) self._root.bind("<o>", lambda _event: self._selection.zoom_decrease()) self._root.bind( "<O>", lambda _event: self._selection.zoom_decrease(precise=True)) self._root.bind("<h>", lambda _event: self._selection.move_left()) self._root.bind("<H>", lambda _event: self._selection.move_left(precise=True)) self._root.bind("<Left>", lambda _event: self._selection.move_left()) self._root.bind("<Shift-Left>", lambda _event: self._selection.move_left(precise=True)) self._root.bind("<l>", lambda _event: self._selection.move_right()) self._root.bind( "<L>", lambda _event: self._selection.move_right(precise=True)) self._root.bind("<Right>", lambda _event: self._selection.move_right()) self._root.bind( "<Shift-Right>", lambda _event: self._selection.move_right(precise=True)) self._root.bind("<k>", lambda _event: self._selection.move_up()) self._root.bind("<K>", lambda _event: self._selection.move_up(precise=True)) self._root.bind("<Up>", lambda _event: self._selection.move_up()) self._root.bind("<Shift-Up>", lambda _event: self._selection.move_up(precise=True)) self._root.bind("<j>", lambda _event: self._selection.move_down()) self._root.bind("<J>", lambda _event: self._selection.move_down(precise=True)) self._root.bind("<Down>", lambda _event: self._selection.move_down()) self._root.bind("<Shift-Down>", lambda _event: self._selection.move_down(precise=True)) self._spinbox_selection_position_x.configure( validatecommand=lambda *_args: self._set_selection_position_x()) self._spinbox_selection_position_x.bind( "<Return>", lambda _event: self._set_selection_position_x() # type: ignore ) self._spinbox_selection_position_x.bind( "<<Decrement>>", lambda _event: self._selection.move_left()) self._spinbox_selection_position_x.bind( "<<Increment>>", lambda _event: self._selection.move_right()) self._spinbox_selection_position_y.configure( validatecommand=lambda *_args: self._set_selection_position_y()) self._spinbox_selection_position_y.bind( "<Return>", lambda _event: self._set_selection_position_y() # type: ignore ) self._spinbox_selection_position_y.bind( "<<Decrement>>", lambda _event: self._selection.move_up()) self._spinbox_selection_position_y.bind( "<<Increment>>", lambda _event: self._selection.move_down()) self._spinbox_selection_zoom.configure( validatecommand=lambda *_args: self._set_selection_zoom()) self._spinbox_selection_zoom.bind( "<Return>", lambda _event: self._set_selection_zoom() # type: ignore ) self._spinbox_selection_zoom.bind( "<<Decrement>>", lambda _event: self._selection.zoom_decrease()) self._spinbox_selection_zoom.bind( "<<Increment>>", lambda _event: self._selection.zoom_increase()) self._show_monitor_labels.trace_add( "write", lambda *_args: self._selection_widget.set_show_monitor_labels( self._show_monitor_labels.get()), ) self._show_unselected_area.trace_add( "write", lambda *_args: self._selection_widget.set_show_unselected_area( self._show_unselected_area.get()), ) def _set_up_menubar(self) -> None: # TODO: check that this look good on macOS, as described here: # https://tkdocs.com/tutorial/menus.html#platformmenus self._root.option_add("*tearOff", False) menu = Menu(self._root) menu_file = Menu(menu) menu_file.add_command( # type: ignore label="Quit", underline=0, accelerator="Q, Escape", command=self.quit) menu.add_cascade(menu=menu_file, label="File", underline=0) # type: ignore menu_edit = Menu(menu) menu_edit.add_command( # type: ignore label="Move Left", underline=5, accelerator="H, Left", command=self._selection.move_left, ) menu_edit.add_command( # type: ignore label="Move Right", underline=5, accelerator="L, Right", command=self._selection.move_right, ) menu_edit.add_command( # type: ignore label="Move Up", underline=5, accelerator="K, Up", command=self._selection.move_up, ) menu_edit.add_command( # type: ignore label="Move Down", underline=5, accelerator="J, Down", command=self._selection.move_down, ) menu_edit.add_separator() # type: ignore menu_edit.add_command( # type: ignore label="Increase Zoom", underline=0, accelerator="I", command=self._selection.zoom_increase, ) menu_edit.add_command( # type: ignore label="Decrease Zoom", underline=10, accelerator="O", command=self._selection.zoom_decrease, ) menu.add_cascade(menu=menu_edit, label="Edit", underline=0) # type: ignore menu_view = Menu(menu) menu_view.add_checkbutton( # type: ignore label="Label Monitors", variable=self._show_monitor_labels, underline=6, accelerator="M", ) menu_view.add_checkbutton( # type: ignore label="Show Unselected", variable=self._show_unselected_area, underline=6, accelerator="N", ) menu.add_cascade(menu=menu_view, label="View", underline=0) # type: ignore menu_help = Menu(menu, name="help") menu_help.add_command( # type: ignore label="About Wallcrop", underline=0, command=lambda: messagebox.showinfo( parent=self._root, title="About Wallcrop", message=f"Wallcrop {wallcrop.__version__}", detail=("Copyright 2021 Lukas Schmelzeisen.\n" "Licensed under the Apache License, Version 2.0.\n" "https://github.com/lschmelzeisen/wallcrop/"), ), ) menu.add_cascade(menu=menu_help, label="Help", underline=3) # type: ignore self._root["menu"] = menu def mainloop(self) -> None: self._root.mainloop() def quit(self) -> None: self._root.destroy() def _set_selection_position_x(self) -> bool: try: value = float( self._spinbox_selection_position_x.get()) # type: ignore except ValueError: self._spinbox_selection_position_x.set(self._selection.position[0]) return False self._selection.set_position( np.array((value, self._selection.position[1]))) return True def _set_selection_position_y(self) -> bool: try: value = float( self._spinbox_selection_position_y.get()) # type: ignore except ValueError: self._spinbox_selection_position_y.set(self._selection.position[1]) return False self._selection.set_position( np.array((self._selection.position[0], value))) return True def _set_selection_zoom(self) -> bool: try: value = float(self._spinbox_selection_zoom.get()) # type: ignore except ValueError: self._spinbox_selection_zoom.set(self._selection.zoom) return False self._selection.set_zoom(value) return True def _reset_spinbox_values(self) -> None: self._spinbox_selection_position_x.set( f"{self._selection.position[0]:.3f}") self._spinbox_selection_position_y.set( f"{self._selection.position[1]:.3f}") self._spinbox_selection_zoom.set(f"{self._selection.zoom:.3f}")
class Page1(Frame): def __init__(self, master): Frame.__init__(self, master) self.style = Style() self.time_frame = LabelFrame(self, text='Time Setting') self.hour_label = Label(self.time_frame, text='Hours') self.hour_box = Spinbox(self.time_frame, from_=0, to=24) self.minute_label = Label(self.time_frame, text='Minutes') self.minute_box = Spinbox(self.time_frame, from_=0, to=60) self.second_label = Label(self.time_frame, text='Seconds') self.second_box = Spinbox(self.time_frame, from_=0, to=60) self.break_label = Label(self.time_frame, text='Time During Sessions') self.break_var = IntVar() self.break_var.set(4) self.break_radio_button_3 = Radiobutton(self.time_frame, text='3 min', variable=self.break_var, value=3) self.break_radio_button_4 = Radiobutton(self.time_frame, text='4 min', variable=self.break_var, value=4) self.break_radio_button_5 = Radiobutton(self.time_frame, text='5 min', variable=self.break_var, value=5) self.break_radio_button_6 = Radiobutton(self.time_frame, text='6 min', variable=self.break_var, value=6) self.break_radio_button_7 = Radiobutton(self.time_frame, text='7 min', variable=self.break_var, value=7) self.name_label = Label(self.time_frame, text='Task Name') self.name_entry = Entry(self.time_frame) self.reminder_label = Label(self.time_frame, text='Reminder') self.reminder_entry = Entry(self.time_frame) self.generate_button = Button(self, text='Generate Task', command=self.create_task) self.save_button = Button(self, text='Save Configuration', command=self.save_config) self.load_button = Button(self, text='Load Configuration', command=self.load_config) self.clear_button = Button(self, text='Clear', command=self.clear) # GRIDDING OPERATIONS self.hour_label.grid(row=1, column=0) self.hour_box.grid(row=1, column=1) self.minute_label.grid(row=1, column=2) self.minute_box.grid(row=1, column=3) self.second_label.grid(row=1, column=4) self.second_box.grid(row=1, column=5) self.break_label.grid(row=2, column=0) self.break_radio_button_3.grid(row=2, column=1) self.break_radio_button_4.grid(row=2, column=2) self.break_radio_button_5.grid(row=2, column=3) self.break_radio_button_6.grid(row=2, column=4) self.break_radio_button_7.grid(row=2, column=5) self.name_label.grid(row=3, column=0) self.name_entry.grid(row=3, column=1, columnspan=5, sticky='ew') self.reminder_label.grid(row=4, column=0) self.reminder_entry.grid(row=4, column=1, columnspan=5, sticky='ew') self.generate_button.grid(row=1, column=0, sticky='snew') self.save_button.grid(row=2, column=0, sticky='snew') self.load_button.grid(row=3, column=0, sticky='snew') self.clear_button.grid(row=4, column=0, sticky='snew') self.time_frame.grid(row=0, column=0) self.grid(row=0, column=0) def create_task(self): # Task signature: (task_name, task_duration, break_duration, task_reminder=None) hours = self.hour_box.get() minutes = self.minute_box.get() seconds = self.second_box.get() break_time = self.break_var.get() if hours and seconds and minutes: total_time = int(hours) * 3600 + int(minutes) * 60 + int(seconds) return Task(self.name_entry.get(), total_time, break_time) elif hours == 's': return Task('sample task', 5, 3 / 60) def save_config(self): with open('config.pickle', 'wb+') as config: pickle.dump(self.create_task(), config) def load_config(self): with open('config.pickle', 'rb') as config: unpickled_task = pickle.load(config) Task.tasks.append(unpickled_task) def clear(self): self.name_entry.delete(0, 'end') self.reminder_entry.delete(0, 'end') self.hour_box.set('') self.minute_box.set('') self.second_box.set('')
def build(self): """Widget construction.""" lf1 = LabelFrame(self.fr0, text='rgb') lf1.grid(column=0, row=0, sticky='new') lf1.columnconfigure(1, weight=1) rl0 = Label(lf1, text='red ') rl0.grid(column=0, row=0, sticky='s') self.rcan = Canvas(lf1, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.rcan.grid(column=1, row=0, sticky='sew', padx=self.sliderlength // 2) self.rcan.bind("<Configure>", self.resize_rcan) rsc = TtkScale(lf1, self.scale_l, from_=0, to=255, variable=self.rvar, orient='horizontal', command=self.rhandle, tickinterval=20) rsc.grid(column=1, row=1, sticky='new') vcmdsb = root.register(sb_okay) rsb = Spinbox(lf1, from_=0, to=255, textvariable=self.rvar, validate='key', validatecommand=(vcmdsb, '%d', '%P', '%S', 255), command=self.rhandle, width=5) rsb.grid(column=2, row=1, sticky='nw') rsb.bind('<KeyRelease>', self.checksb) rel = Label(lf1) rel.grid(column=2, row=2) gl0 = Label(lf1, text='green') gl0.grid(column=0, row=3) self.gcan = Canvas(lf1, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.gcan.grid(column=1, row=3, sticky='sew', padx=self.sliderlength // 2) self.gcan.bind("<Configure>", self.resize_gcan) gsc = TtkScale(lf1, self.scale_l, from_=0, to=255, variable=self.gvar, orient='horizontal', command=self.ghandle, tickinterval=20) gsc.grid(column=1, row=4, sticky='new') gsb = Spinbox(lf1, from_=0, to=255, textvariable=self.gvar, validate='key', validatecommand=(vcmdsb, '%d', '%P', '%S', 255), command=self.ghandle, width=5) gsb.grid(column=2, row=4, sticky='nw') gsb.bind('<KeyRelease>', self.checksb) gel = Label(lf1) gel.grid(column=2, row=5) bl0 = Label(lf1, text='blue ') bl0.grid(column=0, row=6, sticky='s') self.bcan = Canvas(lf1, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.bcan.grid(column=1, row=6, sticky='new', padx=self.sliderlength // 2) self.bcan.bind("<Configure>", self.resize_bcan) bsc = TtkScale(lf1, self.scale_l, from_=0, to=255, variable=self.bvar, orient='horizontal', command=self.bhandle, tickinterval=20) bsc.grid(column=1, row=7, sticky='new') bsb = Spinbox(lf1, from_=0, to=255, textvariable=self.bvar, validate='key', validatecommand=(vcmdsb, '%d', '%P', '%S', 255), command=self.bhandle, width=5) bsb.grid(column=2, row=7, sticky='nw') bsb.bind('<KeyRelease>', self.checksb) bel = Label(lf1) bel.grid(column=2, row=8) lf3 = LabelFrame(self.fr0, text='colour mix') lf3.grid(column=1, row=0, sticky='nw') self.cmcan = cmcan = Canvas(lf3, width=30, height=30, bd=0, highlightthickness=0) cmcan.grid(column=0, row=0, sticky='n', columnspan=2) cmcan.grid_propagate(0) vdraw_gradient(self.cmcan, (255, 0, 0), alpha=255) cml = Label(lf3, text='hash\nvalue') cml.grid(column=0, row=1) vcmd = root.register(is_okay) self.ent0 = ent0 = Entry(lf3, width=8, validate='key', validatecommand=(vcmd, '%i', '%P', '%S'), textvariable=self.evar) ent0.grid(column=1, row=1) ent0.bind('<KeyRelease>', self.checkhash) lf5 = LabelFrame(lf3, text='related colours', style='Wide.TLabelframe') lf5.grid(column=0, row=2, sticky='nw', columnspan=2) self.srcls = [] self.vrcls = [] self.srccans = [] self.vrccans = [] relateds = [25, 50, 75, 100] stexts = ['25% sat', '50% sat', '75% sat', '100% sat'] vtexts = ['25% val', '50% val', '75% val', '100% val'] for ix, rel in enumerate(relateds): Label(lf5, text=stexts[ix]).grid(row=1 + 2 * ix, column=0, sticky='n') self.srcls.append(Label(lf5)) self.srcls[ix].grid(row=1 + 2 * ix, column=1, sticky='n') self.srccans.append( Canvas(lf5, width=30, height=30, bd=0, highlightthickness=0)) self.srccans[ix].grid(row=2 * ix, column=0, sticky='n', columnspan=2) Label(lf5, text=vtexts[ix]).grid(row=9 + 2 * ix, column=0, sticky='n') self.vrcls.append(Label(lf5)) self.vrcls[ix].grid(row=9 + 2 * ix, column=1, sticky='n') self.vrccans.append( Canvas(lf5, width=30, height=30, bd=0, highlightthickness=0)) self.vrccans[ix].grid(row=8 + 2 * ix, column=0, sticky='n', columnspan=2) self.cccan = Canvas(lf5, width=30, height=30, bd=0, highlightthickness=0) self.cccan.grid(column=0, row=17, sticky='n', columnspan=2) self.ccla = Label(lf5, text="comp'y") self.ccla.grid(column=0, row=18, sticky='n') self.ccl = Label(lf5, text="") self.ccl.grid(column=1, row=18, sticky='n') al0 = Label(lf1, text='alpha') al0.grid(column=0, row=10, sticky='s') self.acan = Canvas(lf1, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.acan.grid(column=1, row=10, sticky='new', padx=self.sliderlength // 2) self.acan.bind("<Configure>", self.resize_acan) asc = TtkScale(lf1, self.scale_l, from_=0, to=255, variable=self.avar, orient='horizontal', command=self.ahandle, tickinterval=20) asc.grid(column=1, row=11, sticky='new') asb = Spinbox(lf1, from_=0, to=255, textvariable=self.avar, validate='key', validatecommand=(vcmdsb, '%d', '%P', '%S', 255), command=self.ahandle, width=5) asb.grid(column=2, row=11, sticky='nw') asb.bind('<KeyRelease>', self.checksba) ael = Label(lf1, text=' ') ael.grid(column=2, row=12, sticky='s') draw_gradient(self.rcan, (0, 0, 0), (255, 0, 0), width=self.canvas_w) draw_gradient(self.gcan, (255, 0, 0), (255, 0, 255), width=self.canvas_w) draw_gradient(self.bcan, (255, 0, 0), (255, 255, 0), width=self.canvas_w) draw_agradient(self.acan, (127, 127, 127), (255, 0, 0), width=self.canvas_w) lf4 = LabelFrame(self.fr0, text='hsv') lf4.grid(column=2, row=0, sticky='news') lf4.columnconfigure(1, weight=1) hl0 = Label(lf4, text='hue ') hl0.grid(column=0, row=0, sticky='s') self.hcan = Canvas(lf4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.hcan.grid(column=1, row=0, sticky='sew', padx=self.sliderlength // 2) self.hcan.bind("<Configure>", self.resize_hcan) hsc = TtkScale(lf4, self.scale_l, from_=0, to=360, variable=self.hvar, orient='horizontal', command=self.hhandle, tickinterval=30) hsc.grid(column=1, row=1, sticky='new') vcmdsb = root.register(sb_okay) hsb = Spinbox(lf4, from_=0, to=360, textvariable=self.hvar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 360), command=self.hhandle, width=5) hsb.grid(column=2, row=1, sticky='nw') hsb.bind('<KeyRelease>', self.checksbh) hel = Label(lf4) hel.grid(column=2, row=2) sl0 = Label(lf4, text='sat ') sl0.grid(column=0, row=3) self.scan = Canvas(lf4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.scan.grid(column=1, row=3, sticky='sew', padx=self.sliderlength // 2) self.scan.bind("<Configure>", self.resize_scan) ssc = TtkScale(lf4, self.scale_l, from_=0, to=100, variable=self.svar, orient='horizontal', command=self.shandle, tickinterval=10) ssc.grid(column=1, row=4, sticky='new') ssb = Spinbox(lf4, from_=0, to=100, textvariable=self.svar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 100), command=self.shandle, width=5) ssb.grid(column=2, row=4, sticky='nw') ssb.bind('<KeyRelease>', self.checksb100) sel = Label(lf4) sel.grid(column=2, row=5) vl0 = Label(lf4, text='value') vl0.grid(column=0, row=6, sticky='s') self.vcan = Canvas(lf4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.vcan.grid(column=1, row=6, sticky='new', padx=self.sliderlength // 2) self.vcan.bind("<Configure>", self.resize_vcan) vsc = TtkScale(lf4, self.scale_l, from_=0, to=100, variable=self.vvar, orient='horizontal', command=self.vhandle, tickinterval=10) vsc.grid(column=1, row=7, sticky='new') vsb = Spinbox(lf4, from_=0, to=100, textvariable=self.vvar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 100), command=self.vhandle, width=5) vsb.grid(column=2, row=7, sticky='nw') vsb.bind('<KeyRelease>', self.checksb100) vel = Label(lf4) vel.grid(column=2, row=8) # assume initial setting 0,100,100 hsv to_colour = hsv_to_rgb(*(0, 100, 100)) hue_gradient(self.hcan, width=self.canvas_w) draw_gradient(self.scan, (255, 255, 255), to_colour, width=self.canvas_w) draw_gradient(self.vcan, (0, 0, 0), to_colour, width=self.canvas_w) self.can_hsv = can_hsv = Canvas(lf4, width=self.wheel_w, height=self.wheel_w, bg='#d9d9d9') can_hsv.grid(column=0, row=9, columnspan=3, pady=25, sticky='n') self.hsv_gamut = PhotoImage(file='../figures/colour_wheel.png') can_hsv.create_image(0, 0, anchor='nw', image=self.hsv_gamut) self.ring = circle(can_hsv, 307, 158, self.ring_radius, width=self.ring_width, outline='#555555', activeoutline='black', tags='ring') can_hsv.bind('<Button-1>', self.click_ring) can_hsv.tag_bind('ring', '<B1-Motion>', self.drag_ring) self.related(0, 100, 100, 255, 0, 0)
def makeFrameWidget(self): ''' makes frame widget ''' #make regular frame stuff -- label and tier self.frames_canvas = Canvas(self.canvas_frame, width=self.canvas_width, height=self.canvas_height, background='gray', highlightthickness=0) frames_label = Canvas(self.frame, width=self.label_width, height=self.canvas_height, highlightthickness=0, background='gray') frames_label.create_text(self.label_width, 0, anchor='ne', justify='center', text='frames: ', width=self.label_width, activefill='blue') # make subframe to go on top of label canvas sbframe = Frame(frames_label) #put new widgets onto subframe offset = self.app.Data.getFileLevel('offset') if offset != None: self.frame_shift.set(offset) # for audio alignment go_btn = Button(sbframe, text='Offset', command=self.shiftFrames, takefocus=0) # minmax = len(self.app.Audio.sfile)*1000 txtbox = Spinbox(sbframe, textvariable=self.frame_shift, width=7, from_=-10000000, to=10000000) txtbox.bind('<Escape>', lambda ev: sbframe.focus()) txtbox.bind('<Return>', lambda ev: self.shiftFrames()) go_btn.grid(row=0, column=0, sticky='e') txtbox.grid(row=0, column=1, sticky='e') # put subframe on canvas window = frames_label.create_window(self.label_width * .3, self.canvas_height / 3, anchor='nw', window=sbframe) # ensure position of subframe gets updated frames_label.bind( '<Configure>', lambda e: frames_label.itemconfig(window, width=e.width)) sbframe.bind( '<Configure>', lambda e: frames_label.configure( scrollregion=frames_label.bbox("all"))) self.TkWidgets.append({ 'name': self.frameTierName, 'frames': self.frames_canvas, 'frames-label': frames_label }) self.frames_canvas.bind("<Button-1>", self.getClickedFrame)
def set_config(): sys_para = sys.argv file_path = os.path.split(sys_para[0])[0] gui = False if platform.uname()[0] == 'Windows': # Win默认打开 gui = True if platform.uname()[0] == 'Linux': # Linux 默认关闭 gui = False if '--gui' in sys.argv: # 指定 gui 模式 gui = True if '--nogui' in sys.argv: # 带 nogui 就覆盖前面Win打开要求 gui = False config_file = os.path.join(file_path, 's3_download_config.ini') # If no config file, read the default config if not os.path.exists(config_file): config_file += '.default' print("No customized config, use the default config") cfg = ConfigParser() print(f'Reading config file: {config_file}') try: global SrcBucket, S3Prefix, SrcFileIndex, SrcProfileName, DesDir, MaxRetry, MaxThread, MaxParallelFile, LoggingLevel cfg.read(config_file, encoding='utf-8-sig') SrcBucket = cfg.get('Basic', 'SrcBucket') S3Prefix = cfg.get('Basic', 'S3Prefix') SrcFileIndex = cfg.get('Basic', 'SrcFileIndex') SrcProfileName = cfg.get('Basic', 'SrcProfileName') DesDir = cfg.get('Basic', 'DesDir') Megabytes = 1024 * 1024 ChunkSize = cfg.getint('Advanced', 'ChunkSize') * Megabytes MaxRetry = cfg.getint('Advanced', 'MaxRetry') MaxThread = cfg.getint('Advanced', 'MaxThread') MaxParallelFile = cfg.getint('Advanced', 'MaxParallelFile') LoggingLevel = cfg.get('Advanced', 'LoggingLevel') except Exception as e: print("ERR loading s3_download_config.ini", str(e)) input('PRESS ENTER TO QUIT') sys.exit(0) if gui: # For GUI from tkinter import Tk, filedialog, END, StringVar, BooleanVar, messagebox from tkinter.ttk import Combobox, Label, Button, Entry, Spinbox, Checkbutton # get profile name list in ./aws/credentials pro_conf = RawConfigParser() pro_path = os.path.join(os.path.expanduser("~"), ".aws") cre_path = os.path.join(pro_path, "credentials") if os.path.exists(cre_path): pro_conf.read(cre_path) profile_list = pro_conf.sections() else: print( f"There is no aws_access_key in {cre_path}, please input for S3 Bucket: " ) os.mkdir(pro_path) aws_access_key_id = input('aws_access_key_id: ') aws_secret_access_key = input('aws_secret_access_key: ') region = input('region: ') pro_conf.add_section('default') pro_conf['default']['aws_access_key_id'] = aws_access_key_id pro_conf['default'][ 'aws_secret_access_key'] = aws_secret_access_key pro_conf['default']['region'] = region profile_list = ['default'] with open(cre_path, 'w') as f: print(f"Saving credentials to {cre_path}") pro_conf.write(f) # Click Select Folder def browse_folder(): local_dir = filedialog.askdirectory( initialdir=os.path.dirname(__file__)) url_txt.delete(0, END) url_txt.insert(0, local_dir) file_txt.delete(0, END) file_txt.insert(0, "*") # Finsih browse folder # Click List Buckets def ListBuckets(*args): SrcProfileName = SrcProfileName_txt.get() client = Session(profile_name=SrcProfileName).client('s3') bucket_list = [] try: response = client.list_buckets() if 'Buckets' in response: bucket_list = [b['Name'] for b in response['Buckets']] except Exception as e: messagebox.showerror( 'Error', f'Failt to List buckets. \n' f'Please verify your aws_access_key of profile: [{SrcProfileName}]\n' f'{str(e)}') bucket_list = ['CAN_NOT_GET_BUCKET_LIST'] SrcBucket_txt['values'] = bucket_list SrcBucket_txt.current(0) # Finish ListBuckets # Click List Prefix def ListPrefix(*args): SrcProfileName = SrcProfileName_txt.get() client = Session(profile_name=SrcProfileName).client('s3') prefix_list = [] this_bucket = SrcBucket_txt.get() max_get = 100 try: response = client.list_objects_v2( Bucket=this_bucket, Delimiter='/', RequestPayer='requester' ) # Only get the max 1000 prefix for simply list if 'CommonPrefixes' in response: prefix_list = [ c['Prefix'] for c in response['CommonPrefixes'] ] if not prefix_list: messagebox.showinfo( 'Message', f'There is no "/" Prefix in: {this_bucket}') if response['IsTruncated']: messagebox.showinfo( 'Message', f'More than {max_get} Prefix, cannot fully list here.') except Exception as e: messagebox.showinfo( 'Error', f'Cannot get prefix list from bucket: {this_bucket}, {str(e)}' ) S3Prefix_txt['values'] = prefix_list S3Prefix_txt.current(0) # Finish list prefix def browse_file(*args): SrcProfileName = SrcProfileName_txt.get() S3Prefix = S3Prefix_txt.get() client = Session(profile_name=SrcProfileName).client('s3') file_list = [] this_bucket = SrcBucket_txt.get() max_get = 100 try: response = client.list_objects_v2( Bucket=this_bucket, Prefix=str(PurePosixPath(S3Prefix)) + '/', RequestPayer='requester', Delimiter='/' ) # Only get the max 1000 files for simply list # For delete prefix in des_prefix if S3Prefix == '' or S3Prefix == '/': # 目的bucket没有设置 Prefix dp_len = 0 else: # 目的bucket的 "prefix/"长度 dp_len = len(str(PurePosixPath(S3Prefix))) + 1 if 'Contents' in response: file_list = [ c['Key'][dp_len:] for c in response['Contents'] ] # 去掉Prefix if not file_list: messagebox.showinfo( 'Message', f'There is no files in s3://{this_bucket}/{S3Prefix}') if response['IsTruncated']: messagebox.showinfo( 'Message', f'More than {max_get} files, cannot fully list here.') except Exception as e: messagebox.showinfo( 'Error', f'Cannot get file list from bucket s3://{this_bucket}/{S3Prefix}, {str(e)}' ) file_txt['values'] = file_list file_txt.current(0) # Finish list files # Click START button def close(): window.withdraw() ok = messagebox.askokcancel( 'Start downloading job', f'DOWNLOAD FROM s3://{SrcBucket_txt.get()}/{S3Prefix_txt.get()}\n' f'TO LOCAL {url_txt.get()}\n' f'Click OK to START') if not ok: window.deiconify() return window.quit() return # Finish close() # Start GUI window = Tk() window.title( "LONGBOW - AMAZON S3 DOWNLOAD TOOL WITH BREAK-POINT RESUMING") window.geometry('705x350') window.configure(background='#ECECEC') window.protocol("WM_DELETE_WINDOW", sys.exit) Label(window, text="S3 Bucket").grid(column=0, row=1, sticky='w', padx=2, pady=2) SrcBucket_txt = Combobox(window, width=48) SrcBucket_txt.grid(column=1, row=1, sticky='w', padx=2, pady=2) SrcBucket_txt['values'] = SrcBucket SrcBucket_txt.current(0) Button(window, text="List Buckets", width=10, command=ListBuckets) \ .grid(column=2, row=1, sticky='w', padx=2, pady=2) Label(window, text="S3 Prefix").grid(column=0, row=2, sticky='w', padx=2, pady=2) S3Prefix_txt = Combobox(window, width=48) S3Prefix_txt.grid(column=1, row=2, sticky='w', padx=2, pady=2) S3Prefix_txt['values'] = S3Prefix if S3Prefix != '': S3Prefix_txt.current(0) Button(window, text="List Prefix", width=10, command=ListPrefix) \ .grid(column=2, row=2, sticky='w', padx=2, pady=2) Label(window, text="Filename or *").grid(column=0, row=3, sticky='w', padx=2, pady=2) file_txt = Combobox(window, width=48) file_txt.grid(column=1, row=3, sticky='w', padx=2, pady=2) file_txt['values'] = SrcFileIndex if SrcFileIndex != '': file_txt.current(0) Button(window, text="Select File", width=10, command=browse_file) \ .grid(column=2, row=3, sticky='w', padx=2, pady=2) Label(window, text="AWS Profile").grid(column=0, row=4, sticky='w', padx=2, pady=2) SrcProfileName_txt = Combobox(window, width=15, state="readonly") SrcProfileName_txt['values'] = tuple(profile_list) SrcProfileName_txt.grid(column=1, row=4, sticky='w', padx=2, pady=2) if SrcProfileName in profile_list: position = profile_list.index(SrcProfileName) SrcProfileName_txt.current(position) else: SrcProfileName_txt.current(0) SrcProfileName = SrcProfileName_txt.get() SrcProfileName_txt.bind("<<ComboboxSelected>>", ListBuckets) Label(window, text="Folder").grid(column=0, row=5, sticky='w', padx=2, pady=2) url_txt = Entry(window, width=50) url_txt.grid(column=1, row=5, sticky='w', padx=2, pady=2) url_btn = Button(window, text="Select Folder", width=10, command=browse_folder) url_btn.grid(column=2, row=5, sticky='w', padx=2, pady=2) url_txt.insert(0, DesDir) Label(window, text="MaxThread/File").grid(column=0, row=6, sticky='w', padx=2, pady=2) if MaxThread < 1 or MaxThread > 100: MaxThread = 5 var_t = StringVar() var_t.set(str(MaxThread)) MaxThread_txt = Spinbox(window, from_=1, to=100, width=15, textvariable=var_t) MaxThread_txt.grid(column=1, row=6, sticky='w', padx=2, pady=2) Label(window, text="MaxParallelFile").grid(column=0, row=7, sticky='w', padx=2, pady=2) if MaxParallelFile < 1 or MaxParallelFile > 100: MaxParallelFile = 5 var_f = StringVar() var_f.set(str(MaxParallelFile)) MaxParallelFile_txt = Spinbox(window, from_=1, to=100, width=15, textvariable=var_f) MaxParallelFile_txt.grid(column=1, row=7, sticky='w', padx=2, pady=2) save_config = BooleanVar() save_config.set(True) save_config_txt = Checkbutton(window, text="Save to s3_download_config.ini", var=save_config) save_config_txt.grid(column=1, row=9, padx=2, pady=2) Button(window, text="Start Download", width=15, command=close).grid(column=1, row=10, padx=5, pady=5) window.mainloop() DesDir = url_txt.get() SrcFileIndex = file_txt.get() SrcBucket = SrcBucket_txt.get() S3Prefix = S3Prefix_txt.get() SrcProfileName = SrcProfileName_txt.get() MaxThread = int(MaxThread_txt.get()) MaxParallelFile = int(MaxParallelFile_txt.get()) if save_config: cfg['Basic']['SrcBucket'] = SrcBucket cfg['Basic']['S3Prefix'] = S3Prefix cfg['Basic']['SrcFileIndex'] = SrcFileIndex cfg['Basic']['SrcProfileName'] = SrcProfileName cfg['Basic']['DesDir'] = DesDir cfg['Advanced']['MaxThread'] = str(MaxThread) cfg['Advanced']['MaxParallelFile'] = str(MaxParallelFile) config_file = os.path.join(file_path, 's3_download_config.ini') with codecs.open(config_file, 'w', 'utf-8') as f: cfg.write(f) print(f"Save config to {config_file}") # GUI window finish if S3Prefix == '/': S3Prefix = '' # Finish set_config() return ChunkSize
def __init__(self, root, item, idx=-1): """ Contructor of Editor :param root: Config dialog :type root: Config :param item: Selected profile item :type item: Listbox item """ super().__init__(root) self.root = root self.orig_item = item self.orig_idx = idx frame = Frame(self) Label(frame, text="Profile:").grid(row=0, column=0, sticky=W) self.profile = StringVar() self.profile.set("default") self.profile_edit = Entry(frame, textvariable=self.profile) self.profile_edit.grid(row=0, column=1, sticky=EW) Label(frame, text="Host:").grid(row=1, column=0, sticky=W) self.host = StringVar() host_edit = Entry(frame, textvariable=self.host) host_edit.grid(row=1, column=1, sticky=EW) Label(frame, text="Port:").grid(row=2, column=0, sticky=W) self.port = IntVar() self.port.set(22) port_spin = Spinbox(frame, from_=0, to=99999, textvariable=self.port) port_spin.grid(row=2, column=1, sticky=EW) Label(frame, text="User name:").grid(row=3, column=0, sticky=W) self.user = StringVar() user_edit = Entry(frame, textvariable=self.user) user_edit.grid(row=3, column=1, sticky=EW) Label(frame, text="Password:"******"*") pass_edit.grid(row=4, column=1, sticky=EW) Label(frame, text="Encoding:").grid(row=5, column=0, sticky=W) enc = ["utf8"] ext = list( map(lambda x: x[1]["encoding"], self.root.conf["profiles"].items())) if len(ext) > 0: enc.extend(ext) self.encoding = Combobox(frame, values=list(set(enc))) self.encoding.grid(row=5, column=1, sticky=EW) self.encoding.current(0) Label(frame, text="Mode:").grid(row=6, column=0, sticky=W) self.mode = Combobox(frame, values=("SFTP", "FTP"), state="readonly") self.mode.grid(row=6, column=1, sticky=EW) self.mode.current(0) Label(frame, text="Path:").grid(row=7, column=0, sticky=W) self.path = StringVar() # self.path.set("/") path_edit = Entry(frame, textvariable=self.path) path_edit.grid(row=7, column=1, sticky=EW) frame.pack(fill=X, expand=True) frame.grid_columnconfigure(0, weight=0) frame.grid_columnconfigure(1, weight=1) btn_frame = Frame(self) Button(btn_frame, text="OK", command=self.ok).grid(row=0, column=0, pady=10) Button(btn_frame, text="Cancel", command=self.destroy).grid(row=0, column=1, pady=10) btn_frame.pack(fill=X, expand=True) btn_frame.grid_columnconfigure(0, weight=1) btn_frame.grid_columnconfigure(1, weight=1) Sizegrip(self).pack(side=RIGHT) if item: data = self.root.conf["profiles"][item] self.profile.set(item) self.host.set(data.get("host")) self.port.set(data.get("port")) self.user.set(data.get("user")) self.passwd.set(data.get("password")) self.path.set(data.get("path")) self.encoding.set(data.get("encoding")) self.mode.set(data.get("mode")) self.bind("<Escape>", lambda e: self.destroy())
def build(self): """widget construction Parameters ---------- None Results ------- None """ fr4 = LabelFrame(self.fr0, text='hsv') fr4.grid(column=2, row=0, sticky='ns') hl0 = Label(fr4, text='hue ') hl0.grid(column=0, row=0, sticky='s') self.hcan = Canvas(fr4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.hcan.grid(column=1, row=0, sticky='s') hsc = TtkScale(fr4, from_=0, to=360, variable=self.hvar, orient='horizontal', length=self.scale_l, command=self.hhandle, tickinterval=30) hsc.grid(column=1, row=1, sticky='nw') vcmdsb = root.register(sb_okay) hsb = Spinbox(fr4, from_=0, to=360, textvariable=self.hvar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 360), command=self.hhandle, width=5) hsb.grid(column=2, row=1, sticky='nw') hsb.bind('<KeyRelease>', self.checksbh) hel = Label(fr4, height=1) hel.grid(column=2, row=2) sl0 = Label(fr4, text='sat ') sl0.grid(column=0, row=3) self.scan = Canvas(fr4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.scan.grid(column=1, row=3, sticky='s') ssc = TtkScale(fr4, from_=0, to=100, variable=self.svar, orient='horizontal', length=self.scale_l, command=self.shandle, tickinterval=10) ssc.grid(column=1, row=4, sticky='nw') ssb = Spinbox(fr4, from_=0, to=100, textvariable=self.svar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 100), command=self.shandle, width=5) ssb.grid(column=2, row=4, sticky='nw') ssb.bind('<KeyRelease>', self.checksb100) sel = Label(fr4, height=1) sel.grid(column=2, row=5) vl0 = Label(fr4, text='value') vl0.grid(column=0, row=6, sticky='s') self.vcan = Canvas(fr4, width=self.canvas_w, height=self.canvas_h, bd=0, highlightthickness=0) self.vcan.grid(column=1, row=6, sticky='n') vsc = TtkScale(fr4, from_=0, to=100, variable=self.vvar, orient='horizontal', length=self.scale_l, command=self.vhandle, tickinterval=10) vsc.grid(column=1, row=7, sticky='nw') vsb = Spinbox(fr4, from_=0, to=100, textvariable=self.vvar, validate='key', validatecommand=(vcmdsb, '%P', '%S', 100), command=self.vhandle, width=5) vsb.grid(column=2, row=7, sticky='nw') vsb.bind('<KeyRelease>', self.checksb100) vel = Label(fr4, height=1) vel.grid(column=2, row=8) # assume initial setting 0,100,100 hsv to_colour = hsv_to_rgb(*(0, 100, 100)) hue_gradient(self.hcan, width=self.canvas_w) draw_gradient(self.scan, (255, 255, 255), to_colour, width=self.canvas_w) draw_gradient(self.vcan, (0, 0, 0), to_colour, width=self.canvas_w) can_hsv = Canvas(fr4, width=self.wheel_w, height=self.wheel_w, bg='#d9d9d9') can_hsv.grid(column=1, row=9, pady=25, sticky='n') self.hsv_gamut = PhotoImage(file='../../figures/colour_wheel.png') can_hsv.create_image(0, 0, anchor='nw', image=self.hsv_gamut) self.ring = circle(can_hsv, 307, 158, self.ring_radius, width=self.ring_width, tags='ring')
def _create_text_tab(self, nb): # populate the third frame with other widgets self.pw = PanedWindow(nb, name='pw') self.pw.pack(fill='both', expand=True) lF = LabelFrame(self.pw, text="Slider") fr1 = Frame(lF) fr1.grid(row=0, column=0) from_ = -5 to = 105 value = 19 step = 11 fontSize = 9 scvar = IntVar() #scRange=self.any_number_range(from_,to,step) #scLen = len(scRange[1]) * (fontSize + 10) self.sc = TtkScale(fr1, from_=from_, to=to, variable=scvar, orient='vertical', length=200, showvalue=True, command=lambda s: scvar.set('%d' % float(s)), tickinterval=5, resolution=5) #self.sc = Scale(fr1, from_=from_, to=to, variable=scvar, #orient='vertical',length=scLen, #command=lambda s: scvar.set('%d' % float(s) )) self.sc.set(value) #l1 = Label(fr1,textvariable=scvar,width=5) l1 = Spinbox(fr1, from_=from_, to=to, textvariable=scvar, width=4) l1.grid(row=0, column=0, pady=2) self.sc.grid(row=0, column=1, pady=5, padx=40) fr = Frame(fr1) fr.grid(row=0, column=2) #for ix,sR in enumerate(scRange[1]): #lb = Label(fr, text=sR, font=('Courier New', str(fontSize))) #lb.grid(row=ix, column=1) schvar = IntVar() a = -5 b = 105 #schRange = self.any_number_range(a,b,s=11) #schLen = Font().measure(schRange[0]) self.sch = TtkScale(lF, from_=a, to=b, length=200, variable=schvar, orient='horizontal', showvalue=True, command=lambda s: schvar.set('%d' % float(s)), tickinterval=5, resolution=5) #self.sch = Scale(lF, from_=a, to=b, length=schLen, variable=schvar, #orient='horizontal', #command=lambda s: schvar.set('%d' % float(s) )) self.sch.set(23) #l2 = Label(lF,textvariable=schvar) l2 = Spinbox(lF, from_=a, to=b, textvariable=schvar, width=4) l2.grid(row=1, column=1, pady=2) self.sch.grid(row=2, column=1, pady=40, padx=5, sticky='nw') #l3 = Label(lF,text=schRange[0], font=('Courier New', str(fontSize))) #l3.grid(row=3,column=1,pady=2) self.sch.bind("<ButtonRelease-1>", self.show_x) self.pw.add(lF) lF1 = LabelFrame(self.pw, text="Progress", name='lf') pb1var = IntVar() pb2var = IntVar() self.pbar = Progressbar(lF1, variable=pb1var, length=150, mode="indeterminate", name='pb1', orient='horizontal') self.pb2 = Progressbar(lF1, variable=pb2var, mode='indeterminate', name='pb2', orient='vertical') self.pbar["value"] = 25 self.pbar.grid(row=1, column=0, padx=5, pady=5, sticky='nw') self.pb2.grid(row=1, column=1, padx=5, pady=5, sticky='nw') l3 = Label(lF1, textvariable=pb1var) l3.grid(row=0, column=0, pady=2, sticky='nw') l4 = Label(lF1, textvariable=pb2var) l4.grid(row=0, column=1, pady=2, sticky='nw') start = Button(lF1, text='Start Progress', command=lambda: self._do_bars('start')) stop = Button(lF1, text='Stop Progress', command=lambda: self._do_bars('stop')) start.grid(row=2, column=0, padx=5, pady=5, sticky='nw') stop.grid(row=3, column=0, padx=5, pady=5, sticky='nw') self.pw.add(lF1) # add to notebook (underline = index for short-cut character) nb.add(self.pw, text='Sliders & Others', underline=0)
def _create_text_tab(self, nb): self.dir0 = 1 self.dir1 = 1 # populate the third frame with other widgets fr = Frame(nb, name='fr1') lF = LabelFrame(fr, text="Scale") fr3 = Frame(lF) fr3.grid(row=0, column=0, sticky='nsew') scl = Label( fr3, text= 'Position mouse to cursor ,left mouse click and move\nor use spinbox arrows' ) scl.grid(row=0, column=0, sticky='nw') fr1 = Frame(lF) fr1.grid(row=1, column=0, sticky='nsew') from_ = 0 to = 100 value = 0 step = 10 fontSize = 9 self.scvar = IntVar() scRange = self.any_number_range(from_, to, step) #scLen = len(scRange[1]) * (fontSize + 10) #print('scLen',scLen) self.sc = TtkScale(fr1, from_=from_, to=to, variable=self.scvar, orient='vertical', length=200, showvalue=False, tickinterval=5, resolution=5, sliderlength=16) #self.sc = Scale(fr1, from_=from_, to=to, variable=self.scvar, #orient='vertical', length=scLen) self.sc.set(value) #l1 = Label(fr1,textvariable=self.scvar,width=5) l1 = Spinbox(fr1, from_=from_, to=to, textvariable=self.scvar, width=4) l1.grid(row=1, column=0, padx=5, pady=5) self.sc.grid(row=1, column=1, padx=40, pady=5) fr4 = Frame(fr1) fr4.grid(row=1, column=2) sc_split = '\n'.join(scRange[0].split()) #lb = Label(fr1, text=sc_split, font=('Courier New', str(fontSize)), #width=4*len(scRange[1])) #lb.grid(row=1, column=2,padx=5,pady=5) #sep = Separator(lF, orient="vertical") #sep.grid(row=1,column=2,sticky='ns') fr2 = Frame(lF, name='fr2') fr2.grid(row=1, column=3, sticky='nsew') self.schvar = IntVar() a = 0 b = 100 #schRange = self.any_number_range(a,b,s=10) #schLen = Font().measure(schRange[0]) #print('schLen',schLen) #self.sch = Scale(fr2, from_=a, to=b, length=schLen, variable=self.schvar, #orient='horizontal') self.sch = TtkScale(lF, from_=a, to=b, length=200, variable=self.schvar, orient='horizontal', showvalue=False, tickinterval=5, resolution=5, sliderlength=16) self.sch.set(0) #l2 = Label(fr2,textvariable=self.schvar,width=5) l2 = Spinbox(lF, from_=a, to=b, textvariable=self.schvar, width=4) l2.grid(row=1, column=1, pady=2, sticky='s') self.sch.grid(row=2, column=1, padx=5, pady=40, sticky='nsew') #l3 = Label(fr2,text=schRange[0], font=('Courier New', str(fontSize)), #width=4*len(schRange[1])) #l3.grid(row=3,column=1,padx=5,pady=5) lF.grid(row=0, column=0, sticky='nesw', pady=5, padx=5) lF1 = LabelFrame(fr, text="Progress", name='lf') pb1var = IntVar() pb2var = IntVar() self.pbar = Progressbar(lF1, variable=pb1var, length=150, mode="indeterminate", name='pb1', orient='horizontal') self.pb2 = Progressbar(lF1, variable=pb2var, length=150, mode='indeterminate', name='pb2', orient='vertical') self.pbar["value"] = 25 self.pbar.grid(row=1, column=0, padx=5, pady=5, sticky='nw') sep = Separator(lF1, orient="vertical") self.pb2.grid(row=1, column=2, padx=5, pady=5, sticky='nw') l3 = Label(lF1, textvariable=pb1var) l3.grid(row=0, column=0, pady=2, sticky='nw') sep.grid(row=0, column=1, rowspan=2, sticky='ns') l4 = Label(lF1, textvariable=pb2var) l4.grid(row=0, column=2, pady=2, sticky='nw') sg1 = Sizegrip(fr) sg1.grid(row=2, column=2, sticky='e') lF1.grid(row=1, column=0, sticky='nesw', pady=5, padx=5) start = Button(lF1, text='Start Progress', command=lambda: self._do_bars('start')) stop = Button(lF1, text='Stop Progress', command=lambda: self._do_bars('stop')) start.grid(row=2, column=0, padx=5, pady=5, sticky='nw') stop.grid(row=3, column=0, padx=5, pady=5, sticky='nw') # add to notebook (underline = index for short-cut character) nb.add(fr, text='Scale & Others', underline=0)