コード例 #1
0
    def _init_themes(self):
        self._original_ui_theme = get_workbench().get_option("view.ui_theme")
        self._original_syntax_theme = get_workbench().get_option(
            "view.syntax_theme")

        self._ui_theme_variable = create_string_var(
            self._original_ui_theme,
            modification_listener=self._update_appearance)
        self._syntax_theme_variable = create_string_var(
            self._original_syntax_theme,
            modification_listener=self._update_appearance)

        ttk.Label(self, text=_("UI theme")).grid(row=1,
                                                 column=1,
                                                 sticky="w",
                                                 pady=(0, 10),
                                                 padx=(0, 5))
        self._ui_theme_combo = ttk.Combobox(
            self,
            exportselection=False,
            textvariable=self._ui_theme_variable,
            state="readonly",
            height=15,
            values=get_workbench().get_usable_ui_theme_names(),
        )
        self._ui_theme_combo.grid(row=1, column=2, sticky="nwe", pady=(0, 5))

        ttk.Label(self, text=_("Syntax theme")).grid(row=2,
                                                     column=1,
                                                     sticky="w",
                                                     pady=(0, 10),
                                                     padx=(0, 5))
        self._syntax_theme_combo = ttk.Combobox(
            self,
            exportselection=False,
            textvariable=self._syntax_theme_variable,
            state="readonly",
            height=15,
            values=get_workbench().get_syntax_theme_names(),
        )
        self._syntax_theme_combo.grid(row=2,
                                      column=2,
                                      sticky="nwe",
                                      pady=(0, 5))
コード例 #2
0
    def __init__(self, master):
        super().__init__(master)

        self._configuration_variable = create_string_var(
            get_workbench().get_option("CustomInterpreter.path"))

        entry_label = ttk.Label(self, text=_("Known interpreters"))
        entry_label.grid(row=0, column=0, columnspan=2, sticky=tk.W)

        self._entry = ttk.Combobox(
            self,
            exportselection=False,
            textvariable=self._configuration_variable,
            values=self._get_interpreters(),
        )

        self._entry.grid(row=1, column=0, columnspan=2, sticky=tk.NSEW)
        self._entry.state(["!disabled", "readonly"])

        another_label = ttk.Label(
            self, text=_("Your interpreter isn't in the list?"))
        another_label.grid(row=2,
                           column=0,
                           columnspan=2,
                           sticky=tk.W,
                           pady=(10, 0))

        ttk.Style().configure("Centered.TButton", justify="center")
        self._select_button = ttk.Button(
            self,
            style="Centered.TButton",
            text=_("Locate another") + " " +
            ("python.exe ..."
             if running_on_windows() else _("python executable") + " ...") +
            "\n" + _("NB! Thonny only supports Python 3.5 and later"),
            command=self._select_executable,
        )

        self._select_button.grid(row=3, column=0, columnspan=2, sticky=tk.NSEW)

        self._venv_button = ttk.Button(
            self,
            style="Centered.TButton",
            text=_("Create new virtual environment") + " ...\n" + "(" +
            _("Select existing or create a new empty directory") + ")",
            command=self._create_venv,
        )

        self._venv_button.grid(row=4,
                               column=0,
                               columnspan=2,
                               sticky=tk.NSEW,
                               pady=(5, 0))

        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=1)
コード例 #3
0
    def __init__(self, master):
        ConfigurationPage.__init__(self, master)

        self._backend_specs_by_desc = {
            spec.description: spec
            for spec in get_workbench().get_backends().values()
        }
        self._conf_pages = {}
        self._current_page = None

        current_backend_name = get_workbench().get_option("run.backend_name")
        try:
            current_backend_desc = get_workbench().get_backends(
            )[current_backend_name].description
        except KeyError:
            current_backend_desc = ""

        self._combo_variable = create_string_var(current_backend_desc)

        label = ttk.Label(
            self,
            text=
            _("Which interpreter or device should Thonny use for running your code?"
              ))
        label.grid(row=0, column=0, columnspan=2, sticky=tk.W)

        sorted_backend_specs = sorted(self._backend_specs_by_desc.values(),
                                      key=lambda x: x.sort_key)

        self._combo = ttk.Combobox(
            self,
            exportselection=False,
            textvariable=self._combo_variable,
            values=[spec.description for spec in sorted_backend_specs],
        )

        self._combo.grid(row=1,
                         column=0,
                         columnspan=2,
                         sticky=tk.NSEW,
                         pady=(0, 10))
        self._combo.state(["!disabled", "readonly"])

        self.labelframe = ttk.LabelFrame(self, text=" " + _("Details") + " ")
        self.labelframe.grid(row=2, column=0, sticky="nsew")
        self.labelframe.columnconfigure(0, weight=1)
        self.labelframe.rowconfigure(0, weight=1)

        self.columnconfigure(0, weight=1)
        self.rowconfigure(2, weight=1)

        self._combo_variable.trace("w", self._backend_changed)
        self._backend_changed()
コード例 #4
0
    def __init__(self, master, kind, initial_dir):
        super().__init__(master=master)
        self.result = None

        self.updating_selection = False

        self.kind = kind
        if kind == "open":
            self.title("Open from " + get_runner().get_node_label())
        else:
            assert kind == "save"
            self.title("Save to " + get_runner().get_node_label())

        background = ttk.Frame(self)
        background.grid(row=0, column=0, sticky="nsew")
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        self.browser = DialogRemoteFileBrowser(background, self)
        self.browser.grid(row=0, column=0, columnspan=4, sticky="nsew", pady=20, padx=20)
        self.browser.configure(borderwidth=1, relief="groove")
        self.browser.tree.configure(selectmode="browse")

        self.name_label = ttk.Label(background, text="File name:")
        self.name_label.grid(row=1, column=0, pady=(0, 20), padx=20, sticky="w")

        self.name_var = create_string_var("")
        self.name_entry = ttk.Entry(
            background, textvariable=self.name_var, state="normal" if kind == "save" else "disabled"
        )
        self.name_entry.grid(row=1, column=1, pady=(0, 20), padx=(0, 20), sticky="we")
        self.name_entry.bind("<KeyRelease>", self.on_name_edit, True)

        self.ok_button = ttk.Button(background, text="OK", command=self.on_ok)
        self.ok_button.grid(row=1, column=2, pady=(0, 20), padx=(0, 20), sticky="e")

        self.cancel_button = ttk.Button(background, text="Cancel", command=self.on_cancel)
        self.cancel_button.grid(row=1, column=3, pady=(0, 20), padx=(0, 20), sticky="e")

        background.rowconfigure(0, weight=1)
        background.columnconfigure(1, weight=1)

        self.bind("<Escape>", self.on_cancel, True)
        self.bind("<Return>", self.on_ok, True)
        self.protocol("WM_DELETE_WINDOW", self.on_cancel)

        self.tree_select_handler_id = self.browser.tree.bind(
            "<<TreeviewSelect>>", self.on_tree_select, True
        )

        self.browser.request_focus_into(initial_dir)
コード例 #5
0
    def __init__(self, configuration_manager):
        super().__init__(className="Thonny")
        ttk.Style().theme_use(ui_utils.get_default_basic_theme())

        self.title("Welcome to Thonny!" +
                   "   [portable]" if is_portable() else "")
        self.protocol("WM_DELETE_WINDOW", self.destroy)
        self.ok = False

        self.conf = configuration_manager

        self.main_frame = ttk.Frame(self)
        self.main_frame.grid(row=1, column=1, sticky="nsew")
        self.columnconfigure(1, weight=1)
        self.rowconfigure(1, weight=1)

        self.main_frame.rowconfigure(1, weight=1)

        logo_file = os.path.join(os.path.dirname(__file__), "res",
                                 "ynnoht.png")
        self.logo = tk.PhotoImage(file=logo_file)

        logo_label = ttk.Label(self.main_frame, image=self.logo)
        logo_label.grid(row=1, rowspan=3, column=1, sticky="nsew")

        self.padx = 50
        self.pady = 50

        self.language_variable = ui_utils.create_string_var(
            languages.BASE_LANGUAGE_NAME, self.on_change_language)
        self.add_combo(1, "Language:", self.language_variable,
                       list(languages.LANGUAGES_DICT.values()))

        self.mode_variable = tk.StringVar(value=STD_MODE_TEXT)
        self.add_combo(2, "Initial settings:", self.mode_variable,
                       [STD_MODE_TEXT, RPI_MODE_TEXT])

        ok_button = ttk.Button(self.main_frame,
                               text="Let's go!",
                               command=self.on_ok)
        ok_button.grid(row=3,
                       column=3,
                       padx=(0, self.padx),
                       pady=(self.pady * 0.7, self.pady),
                       sticky="se")

        self.center()
コード例 #6
0
    def _init_fonts(self):
        self._original_editor_family = get_workbench().get_option(
            "view.editor_font_family")
        self._original_editor_size = get_workbench().get_option(
            "view.editor_font_size")
        self._original_io_family = get_workbench().get_option(
            "view.io_font_family")
        self._original_io_size = get_workbench().get_option(
            "view.io_font_size")

        self._editor_family_variable = create_string_var(
            self._original_editor_family,
            modification_listener=self._update_appearance)
        self._editor_size_variable = create_string_var(
            self._original_editor_size,
            modification_listener=self._update_appearance)
        self._io_family_variable = create_string_var(
            self._original_io_family,
            modification_listener=self._update_appearance)
        self._io_size_variable = create_string_var(
            self._original_io_size,
            modification_listener=self._update_appearance)

        ttk.Label(self, text=_("Editor font")).grid(row=1,
                                                    column=3,
                                                    sticky="w",
                                                    pady=(0, 5),
                                                    padx=(25, 5))
        editor_family_combo = ttk.Combobox(
            self,
            exportselection=False,
            state="readonly",
            height=15,
            textvariable=self._editor_family_variable,
            values=self._get_families_to_show(),
        )
        editor_family_combo.grid(row=1, column=4, sticky="nwe", pady=(0, 5))
        editor_size_combo = ttk.Combobox(
            self,
            width=4,
            exportselection=False,
            textvariable=self._editor_size_variable,
            state="readonly",
            height=15,
            values=[str(x) for x in range(3, 73)],
        )
        editor_size_combo.grid(row=1,
                               column=5,
                               sticky="nwe",
                               pady=(0, 5),
                               padx=(5, 0))

        ttk.Label(self, text=_("IO font")).grid(row=2,
                                                column=3,
                                                sticky="w",
                                                pady=(0, 5),
                                                padx=(25, 5))
        io_family_combo = ttk.Combobox(
            self,
            exportselection=False,
            state="readonly",
            height=15,
            textvariable=self._io_family_variable,
            values=self._get_families_to_show(),
        )
        io_family_combo.grid(row=2, column=4, sticky="nwe", pady=(0, 5))

        io_size_combo = ttk.Combobox(
            self,
            width=4,
            exportselection=False,
            textvariable=self._io_size_variable,
            state="readonly",
            height=15,
            values=[str(x) for x in range(3, 73)],
        )
        io_size_combo.grid(row=2,
                           column=5,
                           sticky="nwe",
                           pady=(0, 5),
                           padx=(5, 0))
コード例 #7
0
    def __init__(self, master, package_metadata, selected_version):
        super().__init__(master)
        self.result = None
        self._closed = False
        self._version_data = None
        self._package_name = package_metadata["info"]["name"]
        self.title(_("Advanced install / upgrade / downgrade"))

        self.rowconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)
        main_frame = ttk.Frame(self)  # To get styled background
        main_frame.grid(sticky="nsew")
        main_frame.rowconfigure(0, weight=1)
        main_frame.columnconfigure(0, weight=1)

        version_label = ttk.Label(main_frame, text=_("Desired version"))
        version_label.grid(row=0,
                           column=0,
                           columnspan=2,
                           padx=20,
                           pady=(15, 0),
                           sticky="w")

        def version_sort_key(s):
            # Trying to massage understandable versions into valid StrictVersions
            if s.replace(".", "").isnumeric():  # stable release
                s2 = s + "b999"  # make it latest beta version
            elif "rc" in s:
                s2 = s.replace("rc", "b8")
            else:
                s2 = s
            try:
                return StrictVersion(s2)
            except Exception:
                # use only numbers
                nums = re.findall(r"\d+", s)
                while len(nums) < 2:
                    nums.append("0")
                return StrictVersion(".".join(nums[:3]))

        version_strings = list(package_metadata["releases"].keys())
        version_strings.sort(key=version_sort_key, reverse=True)
        self.version_var = ui_utils.create_string_var(
            selected_version, self._start_fetching_version_info)
        self.version_combo = ttk.Combobox(main_frame,
                                          textvariable=self.version_var,
                                          values=version_strings,
                                          exportselection=False)

        self.version_combo.state(["!disabled", "readonly"])
        self.version_combo.grid(row=1,
                                column=0,
                                columnspan=2,
                                pady=(0, 15),
                                padx=20,
                                sticky="ew")

        self.requires_label = ttk.Label(main_frame, text="")
        self.requires_label.grid(row=2,
                                 column=0,
                                 columnspan=2,
                                 pady=(0, 15),
                                 padx=20,
                                 sticky="ew")

        self.update_deps_var = tk.IntVar()
        self.update_deps_var.set(0)
        self.update_deps_cb = ttk.Checkbutton(main_frame,
                                              text=_("Upgrade dependencies"),
                                              variable=self.update_deps_var)
        self.update_deps_cb.grid(row=3,
                                 column=0,
                                 columnspan=2,
                                 padx=20,
                                 sticky="w")

        self.ok_button = ttk.Button(main_frame,
                                    text=_("Install"),
                                    command=self._ok)
        self.ok_button.grid(row=4,
                            column=0,
                            pady=15,
                            padx=(20, 0),
                            sticky="se")
        self.cancel_button = ttk.Button(main_frame,
                                        text=_("Cancel"),
                                        command=self._cancel)
        self.cancel_button.grid(row=4,
                                column=1,
                                pady=15,
                                padx=(5, 20),
                                sticky="se")

        # self.resizable(height=tk.FALSE, width=tk.FALSE)
        self.version_combo.focus_set()

        self.bind("<Escape>", self._cancel, True)
        self.protocol("WM_DELETE_WINDOW", self._cancel)

        if self.version_var.get().strip():
            self._start_fetching_version_info()