Exemplo n.º 1
0
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()
Exemplo n.º 2
0
    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)