Ejemplo n.º 1
0
class Color(Editor):
    def __init__(self, master, style_def=None):
        super().__init__(master, style_def)
        self.config(**self.style.dark_highlight_active)
        self._entry = Entry(self, **self.style.dark_input,
                            **self.style.no_highlight)
        self._color_button = Label(self, relief='groove', bd=1)
        self._color_button.bind('<ButtonRelease-1>', self._chooser)
        self._color_button.place(x=2, y=2, width=20, height=20)
        self._picker = ColorPicker(self, **self.style.dark_button)
        self._picker.place(relx=1, x=-22, y=0, width=20, height=20)
        self._picker.on_pick(self.set)
        self._entry.place(x=22, y=0, relheight=1, relwidth=1, width=-46)
        self._entry.on_change(self._change)

    def _change(self, value=None):
        value = self._entry.get() if value is None else value
        val = self._parse_color(value)
        if val:
            self._color_button.config(bg=value)
            if self._on_change:
                self._on_change(value)

    def _parse_color(self, value):
        try:
            val = self.winfo_rgb(value)
        except Exception:
            return ""
        val = tuple(map(lambda x: round((x / 65535) * 255), val))
        return to_hex(val)

    def get(self):
        return self._entry.get()

    def set(self, value):
        self.adjust(value)

    def on_change(self, func, *args, **kwargs):
        super().on_change(func, *args, **kwargs)

    def adjust(self, value):
        self._entry.update_idletasks()
        self._entry.set(value)
        try:
            self._color_button.config(bg=value)
        except Exception:
            self._color_button.config(bg="#000000")

    def _chooser(self, *_):
        dialog = ColorDialog(self.window)
        dialog.update_idletasks()
        self.window.update_idletasks()
        dialog.post(self._color_button, side="auto", padding=4)
        if self.get().startswith("#"):
            dialog.set(self.get())
        elif self.get():
            dialog.set(self._parse_color(self.get()))
        dialog.on_change(self.adjust)
Ejemplo n.º 2
0
class SearchBar(Frame):
    def __init__(self, master=None, **cnf):
        super().__init__(master, **cnf)
        self.config(**self.style.no_highlight, **self.style.dark)
        self._entry = Entry(self, **self.style.dark_input)
        self._clear_btn = Button(self,
                                 image=get_icon_image("close", 15, 15),
                                 **self.style.dark_button,
                                 width=25,
                                 height=25)
        self._clear_btn.pack(side="right", fill="y")
        self._clear_btn.on_click(self._clear)
        Label(self,
              **self.style.dark_text,
              image=get_icon_image("search", 15, 15)).pack(side="left")
        self._entry.pack(side="left", fill="both", expand=True, padx=2)
        self._entry.on_entry(self._change)
        self._on_change = None
        self._on_clear = None

    def focus_set(self):
        super().focus_set()
        self._entry.focus_set()

    def on_query_change(self, func, *args, **kwargs):
        self._on_change = lambda val: func(val, *args, **kwargs)

    def on_query_clear(self, func, *args, **kwargs):
        self._on_clear = lambda: func(*args, **kwargs)

    def _clear(self, *_):
        if self._on_clear:
            self._on_clear()

    def _change(self, *_):
        if self._on_change:
            self._on_change(self._entry.get())
Ejemplo n.º 3
0
class Color(Editor):

    def __init__(self, master, style_def=None):
        super().__init__(master, style_def)
        self.config(**self.style.highlight_active)
        self._entry = Entry(self, **self.style.input, **self.style.no_highlight)
        self._color_button = Label(self, relief='groove', bd=1)
        self._color_button.bind('<ButtonRelease-1>', self._chooser)
        self._color_button.place(x=2, y=2, width=20, height=20)
        self._picker = ColorPicker(self, **self.style.button)
        self._picker.place(relx=1, x=-22, y=0, width=20, height=20)
        self._picker.on_pick(self._pick)
        self._entry.place(x=22, y=0, relheight=1, relwidth=1, width=-46)
        self._entry.on_change(self._change)

    def _change(self, value=None):
        value = self._entry.get() if value is None else value
        val = self._parse_color(value)
        if val is not None:
            self._color_button.config(bg=value or self._entry["bg"])
            if self._on_change:
                self._on_change(value)

    def _pick(self, value):
        self.set(value)
        self._change(value)

    def _parse_color(self, value):
        if value == "" and self.style_def.get("allow_transparent", False):
            return value
        try:
            val = self.winfo_rgb(value)
        except Exception:
            return None
        val = tuple(map(lambda x: round((x / 65535) * 255), val))
        return to_hex(val)

    def get(self):
        return self._entry.get()

    @suppress_change
    def set(self, value):
        self.adjust(value)

    def on_change(self, func, *args, **kwargs):
        super().on_change(func, *args, **kwargs)

    def adjust(self, value):
        self._entry.update_idletasks()
        self._entry.set(value)
        try:
            self._color_button.config(bg=value)
        except Exception:
            self._color_button.config(bg=self._entry["bg"])

    def _chooser(self, *_):
        if self.get().startswith("#"):
            colour = self.get()
        elif self.get():
            colour = self._parse_color(self.get())
        else:
            colour = "#000000"
        dialog = ColorDialog(self.window, self._color_button, colour)
        dialog.set(colour)
        dialog.update_idletasks()
        self.window.update_idletasks()
        dialog.on_change(self.adjust)