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) 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()): for index, (settings_name, settings_data) in enumerate(settings.items()):
text = settings_data.text.get(self.root.options["language"]) text = settings_data.text.get(self.root.options["language"])
if text is None: text = settings_data.text.get("*") if text is None: text = settings_data.text.get("*")
if text is None: text = settings_name 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 = ttk.LabelFrame(self, labelwidget=checkbox)
frame.grid(row=index, column=1, sticky="NEWS") 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 return self._value if self.enabled else self.default
@abstractmethod @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 Show the option inside a tkinter widget
:master: master widget :master: master widget
@ -37,7 +37,7 @@ class AbstractModSettings(ABC):
master.grid_rowconfigure(1, weight=1) master.grid_rowconfigure(1, weight=1)
master.grid_columnconfigure(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())) enabled_variable.trace_add("write", lambda *_: setattr(self, "enabled", enabled_variable.get()))
... ...