def render(self): self.config(height=40) seq_frame = Frame(self, **self.style.highlight) seq_frame.grid(row=0, column=0, sticky="nsew") seq_frame.pack_propagate(False) self.sequence = Entry(seq_frame, **self.style.input) self.sequence.place(x=0, y=0, relwidth=1, relheight=1, width=-40) self.sequence.set(self.value.sequence) self.sequence.configure(**self.style.no_highlight) self.sequence.focus_set() self.handler = Entry(self, **self.style.input) self.handler.grid(row=0, column=1, sticky="ew") self.handler.set(self.value.handler) self.handler.config(**self.style.highlight) self.add_arg = Checkbutton(self, **self.style.checkbutton) self.add_arg.grid(row=0, column=2, sticky="ew") self.add_arg.set(self.value.add) del_btn = Label(self, **self.style.button, image=get_icon_image("delete", 14, 14)) del_btn.grid(row=0, column=3, sticky='nswe') del_btn.bind("<Button-1>", self._delete_entry) # set the first two columns to expand evenly for column in range(2): self.grid_columnconfigure(column, weight=1, uniform=1) for widget in (self.sequence, self.handler): widget.on_change(self._on_value_change) self.add_arg._var.trace("w", lambda *_: self._on_value_change())
class StyleItem(Frame): def __init__(self, parent, style_definition, on_change=None): super().__init__(parent.body) self.pref = get_active_pref(self) self.definition = style_definition self.name = style_definition.get("name") self.config(**self.style.surface) display = get_display_name(style_definition, self.pref) self._label = Label(self, **parent.style.text_passive, text=display, anchor="w") self._label.grid(row=0, column=0, sticky='ew') self._editor = get_editor(self, style_definition) self._editor.grid(row=0, column=1, sticky='ew') self.grid_columnconfigure(1, weight=1, uniform=1) self.grid_columnconfigure(0, weight=1, uniform=1) self._on_change = on_change self._editor.set(style_definition.get("value")) self._editor.on_change(self._change) def _change(self, value): if self._on_change: self._on_change(self.name, value) def set_label(self, name): self._label.configure(text=name) def on_change(self, callback, *args, **kwargs): self._on_change = lambda name, val: callback(name, val, *args, **kwargs) def hide(self): self.grid_propagate(False) self.configure(height=0, width=0) def show(self): self.grid_propagate(True) def set(self, value): self._editor.set(value) def set_silently(self, value): # disable ability to trigger on change before setting value prev_callback = self._on_change self._on_change = None self.set(value) self._on_change = prev_callback
class StyleItem(Frame): def __init__(self, parent, style_definition, on_change=None): super().__init__(parent.body) self.definition = style_definition self.name = style_definition.get("name") self.config(**self.style.dark) self._label = Label(self, **parent.style.dark_text_passive, text=style_definition.get("display_name"), anchor="w") self._label.grid(row=0, column=0, sticky='ew') # self._label.config(**parent.style.dark_highlight_active) self._editor = get_editor(self, style_definition) self._editor.grid(row=0, column=1, sticky='ew') self.grid_columnconfigure(1, weight=1, uniform=1) self.grid_columnconfigure(0, weight=1, uniform=1) self._on_change = on_change self._editor.set(style_definition.get("value")) self._editor.on_change(self._change) def _change(self, value): if self._on_change: self._on_change(self.name, value) def on_change(self, callback, *args, **kwargs): self._on_change = lambda name, val: callback(name, val, *args, **kwargs ) def hide(self): self.grid_propagate(False) self.configure(height=0, width=0) def show(self): self.grid_propagate(True) def set(self, value): self._editor.set(value)