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()
Exemple #2
0
    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)
Exemple #4
0
    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()