Пример #1
0
class Attribute(TwoCells):
    def __init__(self, parent, text, value, callback=None, **kwargs):
        super().__init__(parent, **kwargs)
        self.callback = callback
        self.label_text = StringVar()
        self.label_text.set(text)
        self.label = Label(self.frame, textvariable=self.label_text)
        self.label.grid(column=0, row=0, padx=5, pady=5, sticky=W)
        self.current_value = StringVar(self.frame)
        self.current_value.set(value)
        self.value = Entry(self.frame,
                           textvariable=self.current_value,
                           validate="key",
                           validatecommand=self.validate_command)
        self.value.grid(column=1, row=0, padx=5, pady=5, sticky=E)
        if self.callback:
            self.value.bind("<KeyRelease>", self._on_entry_changed)

    def _on_entry_changed(self, event):
        self.callback()

    def hide(self):
        self.label.grid_remove()
        self.value.grid_remove()
        return self

    def show(self, text):
        self.label_text.set(text)
        self.label.grid()
        self.value.grid()
        return self

    def disable(self):
        self.value.configure(state=DISABLED)
        return self

    def enable(self):
        self.value.configure(state=NORMAL)
        return self

    def set(self, value):
        self.current_value.set(value)
        if str(value) == "":
            self.disable()
        else:
            self.enable()

    def get(self):
        value = self.current_value.get()
        if self.validation_type in [
                TwoCells.INTEGERS, TwoCells.NON_NEGATIVE_INTEGERS
        ]:
            return int(value) if value not in ["", "-"] else 0
        else:
            return value