def __init__(self): master = get_workbench() tk.Toplevel.__init__(self, master) self._copy_progess = None self._device_info = None self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) main_frame = ttk.Frame(self) main_frame.grid(row=0, column=0, sticky=tk.NSEW, ipadx=15, ipady=15) self.title("Install CircuitPython firmware to your device") #self.resizable(height=tk.FALSE, width=tk.FALSE) self.protocol("WM_DELETE_WINDOW", self._close) ttk.Label(main_frame, text="Download .uf2 file:").grid(row=1, column=0, sticky="nw", pady=(15,0), padx=15) url_label = create_url_label(main_frame, url="https://circuitpython.org/downloads") url_label.grid(row=1, column=1, columnspan=2, sticky="nw", pady=(15,0), padx=15) ttk.Label(main_frame, text="Select the file:").grid(row=2, column=0, sticky="nw", pady=(10,0), padx=15) self._path_var = tk.StringVar(value="") self._path_entry = ttk.Entry(main_frame, textvariable=self._path_var, width=60) self._path_entry.grid(row=2, column=1, columnspan=1, sticky="nsew", pady=(10,0), padx=(15, 10)) file_button = ttk.Button(main_frame, text=" ... ", command=self._select_file) file_button.grid(row=2, column=2, sticky="nsew", pady=(10,0), padx=(0,15)) ttk.Label(main_frame, text="Prepare device:").grid(row=3, column=0, sticky="nw", pady=(10,0), padx=15) self.device_label = ttk.Label(main_frame, text="<not found>") self.device_label.grid(row=3, column=1, columnspan=2, sticky="nw", pady=(10,0), padx=15) main_frame.rowconfigure(3, weight=1) main_frame.columnconfigure(1, weight=1) command_bar = ttk.Frame(main_frame) command_bar.grid(row=4, column=0, columnspan=3, sticky="nsew") command_bar.columnconfigure(0, weight=1) self._install_button = ttk.Button(command_bar, text="Install", command=self._start_install, width=20) self._install_button.grid(row=0, column=1, pady=15, padx=15, sticky="ne") self._install_button.focus_set() close_button = ttk.Button(command_bar, text="Cancel", command=self._close) close_button.grid(row=0, column=2, pady=15, padx=(0,15), sticky="ne") self.bind('<Escape>', self._close, True) self._update_state()
def __init__(self, master): super().__init__(master) intro_text = (_( "Connect your device to the computer and select corresponding port below" ) + "\n" + "(" + _( 'look for your device name, "USB Serial" or "UART"' ) + ").\n" + _( "If you can't find it, you may need to install proper USB driver first." )) if self.allow_webrepl: intro_text = ( ("Connecting via USB cable:") + "\n" + intro_text + "\n\n" + ("Connecting via WebREPL protocol:") + "\n" + ("If your device supports WebREPL, first connect via serial, make sure WebREPL is enabled\n" + "(import webrepl_setup), connect your computer and device to same network and select < WebREPL > below" )) intro_label = ttk.Label(self, text=intro_text) intro_label.grid(row=0, column=0, sticky="nw") driver_url = self._get_usb_driver_url() if driver_url: driver_url_label = create_url_label(self, driver_url) driver_url_label.grid(row=1, column=0, sticky="nw") port_label = ttk.Label( self, text="Port or WebREPL" if self.allow_webrepl else _("Port")) port_label.grid(row=3, column=0, sticky="nw", pady=(10, 0)) self._ports_by_desc = { p.description if p.device in p.description else p.description + " (" + p.device + ")": p.device for p in list_serial_ports() } self._ports_by_desc["< " + _("Try to detect port automatically") + " >"] = "auto" self._WEBREPL_OPTION_DESC = "< WebREPL >" if self.allow_webrepl: self._ports_by_desc[self._WEBREPL_OPTION_DESC] = "webrepl" def port_order(p): _, name = p if name is None: return "" elif name.startswith("COM") and len(name) == 4: # Make one-digit COM ports go before COM10 return name.replace("COM", "COM0") else: return name # order by port, auto first port_descriptions = [ key for key, _ in sorted(self._ports_by_desc.items(), key=port_order) ] self._port_desc_variable = create_string_var( self.get_current_port_desc(), self._on_change_port) self._port_combo = ttk.Combobox( self, exportselection=False, textvariable=self._port_desc_variable, values=port_descriptions, ) self._port_combo.state(["!disabled", "readonly"]) self._port_combo.grid(row=4, column=0, sticky="new") self.columnconfigure(0, weight=1) self._webrepl_frame = None self._flashing_frame = None self._on_change_port()
def __init__(self, master): super().__init__(master) ui_utils.create_url_label( self, "https://github.com/thonny/thonny/wiki/Friendly-traceback", text=_("Friendly traceback level"), ).grid(row=1, column=0, sticky="w") self.add_combobox( "assistance.friendly_traceback_level", values=[0, 1, 2, 3, 4, 5, 6, 7, 9], row=1, column=1, width=3, padx=5, ) self.add_checkbox( "assistance.open_assistant_on_errors", _("Open Assistant automatically when program crashes with an exception" ), row=2, columnspan=2, ) self.add_checkbox( "assistance.open_assistant_on_warnings", _("Open Assistant automatically when it has warnings for your code" ), row=3, columnspan=2, ) if get_workbench().get_option("assistance.use_pylint", "missing") != "missing": self.add_checkbox("assistance.use_pylint", _("Perform selected Pylint checks"), row=4, columnspan=2) if get_workbench().get_option("assistance.use_mypy", "missing") != "missing": self.add_checkbox("assistance.use_mypy", _("Perform MyPy checks"), row=5, columnspan=2) disabled_checks_label = ttk.Label( self, text=_("Disabled checks (one id per line)")) disabled_checks_label.grid(row=8, sticky="nw", pady=(10, 0), columnspan=2) self.disabled_checks_box = TextFrame( self, vertical_scrollbar_style=scrollbar_style("Vertical"), horizontal_scrollbar_style=scrollbar_style("Horizontal"), horizontal_scrollbar_class=ui_utils.AutoScrollbar, wrap="word", font="TkDefaultFont", # cursor="arrow", padx=5, pady=5, height=4, borderwidth=1, relief="groove", ) self.disabled_checks_box.grid(row=9, sticky="nsew", pady=(0, 10), columnspan=2) self.disabled_checks_box.text.insert( "1.0", "\n".join( get_workbench().get_option("assistance.disabled_checks"))) self.columnconfigure(1, weight=1) self.rowconfigure(9, weight=1)
def __init__(self, master): super().__init__(master) self._has_opened_firmware_flasher = False intro_label = ttk.Label(self, text=self._get_intro_text()) intro_label.grid(row=0, column=0, sticky="nw") driver_url = self._get_usb_driver_url() if driver_url: driver_url_label = create_url_label(self, driver_url) driver_url_label.grid(row=1, column=0, sticky="nw") port_label = ttk.Label( self, text="Port or WebREPL" if self.allow_webrepl else tr("Port")) port_label.grid(row=3, column=0, sticky="nw", pady=(10, 0)) self._ports_by_desc = { p.description if p.device in p.description else p.description + " (" + p.device + ")": p.device for p in list_serial_ports() } self._ports_by_desc["< " + tr("Try to detect port automatically") + " >"] = "auto" self._WEBREPL_OPTION_DESC = "< WebREPL >" if self.allow_webrepl: self._ports_by_desc[self._WEBREPL_OPTION_DESC] = "webrepl" def port_order(p): _, name = p if name is None: return "" elif name.startswith("COM") and len(name) == 4: # Make one-digit COM ports go before COM10 return name.replace("COM", "COM0") else: return name # order by port, auto first port_descriptions = [ key for key, _ in sorted(self._ports_by_desc.items(), key=port_order) ] self._port_desc_variable = create_string_var( self.get_stored_port_desc(), self._on_change_port) self._port_combo = ttk.Combobox( self, exportselection=False, textvariable=self._port_desc_variable, values=port_descriptions, ) self._port_combo.state(["!disabled", "readonly"]) self._port_combo.grid(row=4, column=0, sticky="new") self.columnconfigure(0, weight=1) self._webrepl_frame = None self._flashing_frame = None last_row = ttk.Frame(self) last_row.grid(row=100, sticky="swe") self.rowconfigure(100, weight=1) last_row.columnconfigure(1, weight=1) advanced_link = ui_utils.create_action_label( last_row, tr("Advanced options"), lambda event: self._show_advanced_options()) # advanced_link.grid(row=0, column=1, sticky="e") if self._has_flashing_dialog(): firmware_link = ui_utils.create_action_label( last_row, tr("Install or update firmware"), self._on_click_firmware_installer_link, ) firmware_link.grid(row=1, column=1, sticky="e") self._on_change_port()