def main(application_name, arguments): """ Main procedure. Parameters ---------- application_name : str The name of the application (used in console messages). arguments : list of str The command line arguments passed to the interpreter (beside the name of the script). """ # Parse command line arguments. is_config_generation_requested = False config_file_path = DEFAULT_CONFIG_PATH try: opts, _ = getopt.getopt(arguments, 'c:ih', ['config=', 'install']) except getopt.GetoptError: print_usage_and_exit(application_name, 2) for opt, arg in opts: if opt in ('-c', '--config'): config_file_path = arg elif opt in ('-h', '--help'): print_usage_and_exit(application_name) elif opt in ('-i', '--install'): is_config_generation_requested = True config_manager = ConfigManager(config_file_path) # Create configuration file and exit. if is_config_generation_requested: config = Config() config.create_default() config_manager.save(config) # Load configuration, then go ahead. else: config = config_manager.load() app = App(config) app.execute()
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) ConfigManager.load() self.theme_manager = ThemeManager(self) self.theme_manager.set_theme(ConfigManager.get("theme")) self.optionsbar = OptionsBar(self) self.optionsbar.grid(row=0, column=1, sticky="nsew", padx=2, pady=2) self.toolbar = ToolBar(self, self.optionsbar) self.toolbar.grid(row=1, column=0, sticky="nsew", padx=2, pady=2) self.codetext = CodeText(self, width=100, wrap="none", canvas_name=ConfigManager.get("canvas_name")) self.codetext.grid(row=0, column=2, rowspan=3) self.canvas_xy_var = tk.StringVar() self.canvas_xy_label = ttk.Label(self, textvariable=self.canvas_xy_var) self.canvas_xy_label.grid(row=0, column=0, sticky="se") self.canvas = PaintCanvas(self, self.toolbar, self.optionsbar, self.codetext, self.canvas_xy_var, background="white") self.canvas.grid(row=1, column=1, padx=2, pady=2, sticky="n") self.menu = tk.Menu(self) self["menu"] = self.menu self.menu.add_command(label="Save", command=self.save) self.menu.add_command(label="Undo", command=ActionManager.undo) self.menu.add_command(label="Redo", command=ActionManager.redo) self._menu_themes = tk.Menu(self.menu, tearoff=False) self._menu_themes.add_command( label="dark", command=lambda: self.set_theme("darkTKC")) self._menu_themes.add_command( label="light", command=lambda: self.set_theme("lightTKC")) self.menu.add_cascade(menu=self._menu_themes, label="theme") self.canvas_frame = ttk.Frame(self) self.canvas_frame.grid(row=2, column=1, sticky="nw") self.grid_state = tk.BooleanVar(self) self.grid_toggle = ttk.Checkbutton(self.canvas_frame, command=self._toggle_grid, variable=self.grid_state, onvalue=True, offvalue=False, text="show grid") self.grid_toggle.grid(row=0, column=0, padx=3, pady=0, sticky="w") self.grid_state.set(True) self.canvas_grid = addwidgets.IntEdit(self.canvas_frame, "grid", entry_width=3, default=1) self.canvas_grid.var.trace_add("write", self.change_grid) self.canvas_grid.grid(row=1, column=0, padx=3, pady=0, sticky="w") self.canvas_name_edit = addwidgets.StrEdit(self.canvas_frame, "name", entry_width=6, validate=lambda v: v != "") self.canvas_name_edit.set(ConfigManager.get("canvas_name")) self.canvas_name_edit.var.trace_add( "write", lambda *args: self.configure_canvas( canvas_name=self.canvas_name_edit.get())) self.canvas_name_edit.grid(row=0, column=1, padx=3, pady=0, sticky="w") self.canvas_color_edit = addwidgets.ColorEdit(self.canvas_frame, "color", default="white") self.canvas_color_edit.var.trace_add( "write", lambda *args: self.configure_canvas( background=self.canvas_color_edit.get())) self.canvas_color_edit.grid(row=1, column=1, padx=3, pady=0, sticky="w") self.canvas_width_edit = addwidgets.IntEdit(self.canvas_frame, "width", entry_width=4, default=int( self.canvas["width"])) self.canvas_width_edit.var.trace_add( "write", lambda *args: self.configure_canvas( width=self.canvas_width_edit.get())) self.canvas_width_edit.grid(row=0, column=2, padx=3, pady=0, sticky="w") self.canvas_height_edit = addwidgets.IntEdit( self.canvas_frame, "height", entry_width=4, default=int(self.canvas["height"])) self.canvas_height_edit.var.trace_add( "write", lambda *args: self.configure_canvas( height=self.canvas_height_edit.get())) self.canvas_height_edit.grid(row=1, column=2, padx=3, pady=0, sticky="w") self.toolbar.add_tool("cursor") self.toolbar.add_tool("line") self.toolbar.add_tool("rectangle") self.toolbar.add_tool("oval") self.toolbar.add_tool("polygon") self.toolbar.add_tool("text") self.toolbar.add_tool("arc") self.toolbar.tool.set("line") self.from_x_y_frame = ttk.Frame(self) self.from_x_y_var = tk.BooleanVar() self.from_x_y_toggle = ttk.Checkbutton(self.from_x_y_frame, variable=self.from_x_y_var, onvalue=True, offvalue=False, text="from_xy", command=self.toggle_xy) self.from_x_y_toggle.pack(side="top") self.from_x_y_btn = ttk.Button( self.from_x_y_frame, text="Set x,y", command=lambda: self.toolbar.set_tool("set_xy")) self.from_x_y_btn["state"] = ("disabled", ) self.from_x_y_btn.pack(side="top") self.from_x_y_frame.grid(row=2, column=0)