clicking on any mod settings widget will automatically enable the settings, instead of needing to enable it manually.

This commit is contained in:
Faraphel 2022-08-07 20:22:35 +02:00
parent e46acba9a6
commit 453b631325
2 changed files with 15 additions and 4 deletions

View file

@ -54,13 +54,24 @@ class FrameSettings(ttk.Frame):
self.columnconfigure(1, weight=1)
def get_event_checkbox(enabled_variable: tkinter.BooleanVar):
"""
Return the event for any child of a frmae when clicked
"""
return lambda event: enabled_variable.set(True)
for index, (settings_name, settings_data) in enumerate(settings.items()):
text = settings_data.text.get(self.root.options["language"])
if text is None: text = settings_data.text.get("*")
if text is None: text = settings_name
checkbox = ttk.Checkbutton(self, text=text)
enabled_variable = tkinter.BooleanVar(value=False)
checkbox = ttk.Checkbutton(self, text=text, variable=enabled_variable)
frame = ttk.LabelFrame(self, labelwidget=checkbox)
frame.grid(row=index, column=1, sticky="NEWS")
settings_data.tkinter_show(frame, checkbox)
settings_data.tkinter_show(frame, enabled_variable)
# if any of the label child are clicked, automatically enable the option
for child in frame.winfo_children():
child.bind("<Button-1>", get_event_checkbox(enabled_variable))

View file

@ -28,7 +28,7 @@ class AbstractModSettings(ABC):
return self._value if self.enabled else self.default
@abstractmethod
def tkinter_show(self, master: ttk.LabelFrame, checkbox) -> None:
def tkinter_show(self, master: ttk.LabelFrame, enabled_variable: tkinter.BooleanVar) -> None:
"""
Show the option inside a tkinter widget
:master: master widget
@ -37,7 +37,7 @@ class AbstractModSettings(ABC):
master.grid_rowconfigure(1, weight=1)
master.grid_columnconfigure(1, weight=1)
enabled_variable = tkinter.BooleanVar(master, value=self.enabled)
enabled_variable.set(self.enabled)
enabled_variable.trace_add("write", lambda *_: setattr(self, "enabled", enabled_variable.get()))
...