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