示例#1
0
    def __init__(self,
                 app,
                 obj=None,
                 title=None,
                 browse=False,
                 on_import=None,
                 geometry=None):
        tk.Toplevel.__init__(self, app, background=Color.BLACK)
        if geometry:
            self.geometry(geometry)

        self.protocol("WM_DELETE_WINDOW", self._on_close)

        if obj:
            self.title(title or classname(obj))
            self.doc = Doc(self, obj, run_code=app.console.prompt.push)
            self.doc.pack(fill="both", expand=True)
            return

        self.app = app
        self.on_import = on_import
        self.menu = Menu(self)

        self.paned_window = ttk.PanedWindow(self, orient="horizontal")
        self.notebook = Notebook(self, has_labels=True)
        self.installed_pkgs = Treeview(self, self)
        self.builtin_pkgs = Treeview(self, self)
        self.notebook.add("Built In", self.builtin_pkgs)
        self.notebook.add("Installed", self.installed_pkgs)
        self.doc = Doc(self,
                       has_sidebar=True,
                       run_code=app.console.prompt.push)

        frame = tk.Frame(self)
        input_area = tk.Frame(frame, background=Color.BLACK)
        name_label = tk.Label(input_area,
                              text="import ",
                              font="Menlo 14",
                              background=Color.BLACK,
                              foreground=Color.WHITE)
        self.name_entry = tk.Entry(input_area,
                                   font="Monospace 14",
                                   highlightbackground=Color.BLACK)

        input_area_2 = tk.Frame(frame, background=Color.BLACK)
        as_label = tk.Label(input_area_2,
                            text="    as ",
                            font="Menlo 14",
                            background=Color.BLACK,
                            foreground=Color.WHITE)
        self.as_entry = tk.Entry(input_area_2,
                                 font="Monospace 14",
                                 highlightbackground=Color.BLACK)

        btn_area = tk.Frame(frame, background=Color.BLACK)
        cancel_btn = Button(btn_area, text="Cancel", command=self.destroy)
        self.ok_btn = Button(btn_area, text="Ok", command=self._on_ok)

        for i in INSTALLED_PKGS:
            self.installed_pkgs.insert("", "end", i, text=str(i).split(" ")[0])

        for j in BUILTIN_PKGS:
            self.builtin_pkgs.insert("", "end", j, text=j)

        if on_import:
            self.notebook.frame.pack(fill="both", expand=True)
            frame.pack(side="left", fill="both", expand=True)
            self.name_entry.focus()
        else:
            self.paned_window.add(self.notebook.frame)
            self.paned_window.add(self.doc)
            self.paned_window.pack(side="left", fill="both", expand=True)

        if on_import:
            cancel_btn.pack(side="left",
                            fill="x",
                            expand=True,
                            anchor="center",
                            padx=4,
                            pady=4)
            self.ok_btn.pack(side="left",
                             fill="x",
                             expand=True,
                             anchor="center",
                             padx=4,
                             pady=4)
            btn_area.pack(side="bottom", fill="both")

            input_area_2.pack(side="bottom", fill="both")
            as_label.pack(side="left")
            self.as_entry.pack(side="left", expand=True)

            input_area.pack(side="bottom", fill="both")
            name_label.pack(side="left")
            self.name_entry.pack(side="left", expand=True)

            self.bind("<Return>", self._on_ok)
            self.bind("<Escape>", lambda event: self.destroy())
        else:
            self.doc.paned_window.bind("<Configure>", self._on_configure_doc)

        for i in ("installed_pkgs", "builtin_pkgs"):
            getattr(self, i).bind(
                "<<TreeviewSelect>>",
                lambda event, key=i: self._on_selection(event, key))
            getattr(self, i).bind(
                BUTTON_RIGHT,
                lambda event, key=i: self._on_button_right(event, key))
示例#2
0
class Browser(tk.Toplevel):
    def __init__(self,
                 app,
                 obj=None,
                 title=None,
                 browse=False,
                 on_import=None,
                 geometry=None):
        tk.Toplevel.__init__(self, app, background=Color.BLACK)
        if geometry:
            self.geometry(geometry)

        self.protocol("WM_DELETE_WINDOW", self._on_close)

        if obj:
            self.title(title or classname(obj))
            self.doc = Doc(self, obj, run_code=app.console.prompt.push)
            self.doc.pack(fill="both", expand=True)
            return

        self.app = app
        self.on_import = on_import
        self.menu = Menu(self)

        self.paned_window = ttk.PanedWindow(self, orient="horizontal")
        self.notebook = Notebook(self, has_labels=True)
        self.installed_pkgs = Treeview(self, self)
        self.builtin_pkgs = Treeview(self, self)
        self.notebook.add("Built In", self.builtin_pkgs)
        self.notebook.add("Installed", self.installed_pkgs)
        self.doc = Doc(self,
                       has_sidebar=True,
                       run_code=app.console.prompt.push)

        frame = tk.Frame(self)
        input_area = tk.Frame(frame, background=Color.BLACK)
        name_label = tk.Label(input_area,
                              text="import ",
                              font="Menlo 14",
                              background=Color.BLACK,
                              foreground=Color.WHITE)
        self.name_entry = tk.Entry(input_area,
                                   font="Monospace 14",
                                   highlightbackground=Color.BLACK)

        input_area_2 = tk.Frame(frame, background=Color.BLACK)
        as_label = tk.Label(input_area_2,
                            text="    as ",
                            font="Menlo 14",
                            background=Color.BLACK,
                            foreground=Color.WHITE)
        self.as_entry = tk.Entry(input_area_2,
                                 font="Monospace 14",
                                 highlightbackground=Color.BLACK)

        btn_area = tk.Frame(frame, background=Color.BLACK)
        cancel_btn = Button(btn_area, text="Cancel", command=self.destroy)
        self.ok_btn = Button(btn_area, text="Ok", command=self._on_ok)

        for i in INSTALLED_PKGS:
            self.installed_pkgs.insert("", "end", i, text=str(i).split(" ")[0])

        for j in BUILTIN_PKGS:
            self.builtin_pkgs.insert("", "end", j, text=j)

        if on_import:
            self.notebook.frame.pack(fill="both", expand=True)
            frame.pack(side="left", fill="both", expand=True)
            self.name_entry.focus()
        else:
            self.paned_window.add(self.notebook.frame)
            self.paned_window.add(self.doc)
            self.paned_window.pack(side="left", fill="both", expand=True)

        if on_import:
            cancel_btn.pack(side="left",
                            fill="x",
                            expand=True,
                            anchor="center",
                            padx=4,
                            pady=4)
            self.ok_btn.pack(side="left",
                             fill="x",
                             expand=True,
                             anchor="center",
                             padx=4,
                             pady=4)
            btn_area.pack(side="bottom", fill="both")

            input_area_2.pack(side="bottom", fill="both")
            as_label.pack(side="left")
            self.as_entry.pack(side="left", expand=True)

            input_area.pack(side="bottom", fill="both")
            name_label.pack(side="left")
            self.name_entry.pack(side="left", expand=True)

            self.bind("<Return>", self._on_ok)
            self.bind("<Escape>", lambda event: self.destroy())
        else:
            self.doc.paned_window.bind("<Configure>", self._on_configure_doc)

        for i in ("installed_pkgs", "builtin_pkgs"):
            getattr(self, i).bind(
                "<<TreeviewSelect>>",
                lambda event, key=i: self._on_selection(event, key))
            getattr(self, i).bind(
                BUTTON_RIGHT,
                lambda event, key=i: self._on_button_right(event, key))

    def _on_configure_doc(self, event):
        self.doc.paned_window.sashpos(0, 0)
        self.doc.paned_window.unbind("<Configure>")

    def _on_selection(self, event, name):
        key = getattr(self, name).selection()[0]

        self.doc.clear()
        if self.on_import:
            self.name_entry.delete(0, "end")
            self.name_entry.insert("end", key)
            return

        try:
            module = __import__(key)
        except:
            return

        self.doc.show(module)

    def _on_close(self):
        help.geometry = self.geometry()
        self.destroy()

    def _on_ok(self, event=None):
        name = self.name_entry.get()
        if not name:
            builtin_print("\a")
            return

        if self.on_import:
            self.on_import(self.name_entry.get(), self.as_entry.get())
        self.destroy()

    def _on_button_right(self, event, name):
        attr = getattr(self, name)
        key = attr.identify_row(event.y)
        attr.selection_set(key)

        if self.on_import:
            try:
                module = __import__(key)
            except:
                return

            items = [{"label": "View Doc", "command": lambda: help(module)}]
        else:
            items = [{
                "label":
                "Import Module",
                "command":
                lambda: self.app.menu.import_module(key, open_folders=True)
            }]

        self.menu.set_menu(items)
        self.menu.show(event)