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))
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)
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()
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)
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()
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))
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()