From 453b631325cc291e9e8a504a1bae23ae0844624f Mon Sep 17 00:00:00 2001 From: Faraphel Date: Sun, 7 Aug 2022 20:22:35 +0200 Subject: [PATCH] clicking on any mod settings widget will automatically enable the settings, instead of needing to enable it manually. --- source/gui/mod_settings.py | 15 +++++++++++++-- source/mkw/ModSettings/__init__.py | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/source/gui/mod_settings.py b/source/gui/mod_settings.py index b50e1a1..1d404fe 100644 --- a/source/gui/mod_settings.py +++ b/source/gui/mod_settings.py @@ -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("", get_event_checkbox(enabled_variable)) diff --git a/source/mkw/ModSettings/__init__.py b/source/mkw/ModSettings/__init__.py index 5d6205f..aa0f1ae 100644 --- a/source/mkw/ModSettings/__init__.py +++ b/source/mkw/ModSettings/__init__.py @@ -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())) ...