Use SelectCombobox for language selection
This commit is contained in:
1 parent
49e8db9e22
commit
9e3ae85fa5
1 file changed
+34
-4
@@ -383,6 +383,29 @@ class SelectMenu(tk.Menubutton, Generic[_T]):
|
|||||||
return self._menu_options[self.cget("text")]
|
return self._menu_options[self.cget("text")]
|
||||||
|
|
||||||
|
|
||||||
|
class SelectCombobox(ttk.Combobox):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
master: tk.Misc,
|
||||||
|
*args,
|
||||||
|
textvariable: tk.StringVar,
|
||||||
|
values: list[str] | tuple[str, ...],
|
||||||
|
command: abc.Callable[[tk.Event[SelectCombobox]], None] | None = None,
|
||||||
|
**kwargs,
|
||||||
|
) -> None:
|
||||||
|
super().__init__(
|
||||||
|
master,
|
||||||
|
*args,
|
||||||
|
values=values,
|
||||||
|
exportselection=False,
|
||||||
|
textvariable=textvariable,
|
||||||
|
state="readonly",
|
||||||
|
**kwargs,
|
||||||
|
)
|
||||||
|
if command is not None:
|
||||||
|
self.bind("<<ComboboxSelected>>", command)
|
||||||
|
|
||||||
|
|
||||||
###########################################
|
###########################################
|
||||||
# GUI ELEMENTS END / GUI DEFINITION START #
|
# GUI ELEMENTS END / GUI DEFINITION START #
|
||||||
###########################################
|
###########################################
|
||||||
@@ -1509,6 +1532,7 @@ class _SettingsVars(TypedDict):
|
|||||||
tray: IntVar
|
tray: IntVar
|
||||||
proxy: StringVar
|
proxy: StringVar
|
||||||
autostart: IntVar
|
autostart: IntVar
|
||||||
|
language: StringVar
|
||||||
priority_only: IntVar
|
priority_only: IntVar
|
||||||
tray_notifications: IntVar
|
tray_notifications: IntVar
|
||||||
|
|
||||||
@@ -1521,6 +1545,7 @@ class SettingsPanel:
|
|||||||
self._twitch = manager._twitch
|
self._twitch = manager._twitch
|
||||||
self._settings: Settings = manager._twitch.settings
|
self._settings: Settings = manager._twitch.settings
|
||||||
self._vars: _SettingsVars = {
|
self._vars: _SettingsVars = {
|
||||||
|
"language": StringVar(master, _.current),
|
||||||
"proxy": StringVar(master, str(self._settings.proxy)),
|
"proxy": StringVar(master, str(self._settings.proxy)),
|
||||||
"tray": IntVar(master, self._settings.autostart_tray),
|
"tray": IntVar(master, self._settings.autostart_tray),
|
||||||
"autostart": IntVar(master, 0),
|
"autostart": IntVar(master, 0),
|
||||||
@@ -1544,16 +1569,19 @@ class SettingsPanel:
|
|||||||
general_frame.columnconfigure(0, weight=1)
|
general_frame.columnconfigure(0, weight=1)
|
||||||
center_frame2 = ttk.Frame(general_frame)
|
center_frame2 = ttk.Frame(general_frame)
|
||||||
center_frame2.grid(column=0, row=0)
|
center_frame2.grid(column=0, row=0)
|
||||||
|
|
||||||
# language frame
|
# language frame
|
||||||
language_frame = ttk.Frame(center_frame2)
|
language_frame = ttk.Frame(center_frame2)
|
||||||
language_frame.grid(column=0, row=0)
|
language_frame.grid(column=0, row=0)
|
||||||
ttk.Label(language_frame, text="Language 🌐 (requires restart): ").grid(column=0, row=0)
|
ttk.Label(language_frame, text="Language 🌐 (requires restart): ").grid(column=0, row=0)
|
||||||
SelectMenu(
|
SelectCombobox(
|
||||||
language_frame,
|
language_frame,
|
||||||
default=_.current,
|
width=12,
|
||||||
options={k: k for k in _.languages},
|
values=list(_.languages),
|
||||||
command=lambda lang: setattr(self._settings, "language", lang),
|
textvariable=self._vars["language"],
|
||||||
|
command=lambda e: setattr(self._settings, "language", self._vars["language"].get()),
|
||||||
).grid(column=1, row=0)
|
).grid(column=1, row=0)
|
||||||
|
|
||||||
# checkboxes frame
|
# checkboxes frame
|
||||||
checkboxes_frame = ttk.Frame(center_frame2)
|
checkboxes_frame = ttk.Frame(center_frame2)
|
||||||
checkboxes_frame.grid(column=0, row=1)
|
checkboxes_frame.grid(column=0, row=1)
|
||||||
@@ -1583,6 +1611,7 @@ class SettingsPanel:
|
|||||||
ttk.Checkbutton(
|
ttk.Checkbutton(
|
||||||
checkboxes_frame, variable=self._vars["priority_only"], command=self.priority_only
|
checkboxes_frame, variable=self._vars["priority_only"], command=self.priority_only
|
||||||
).grid(column=1, row=irow, sticky="w")
|
).grid(column=1, row=irow, sticky="w")
|
||||||
|
|
||||||
# proxy frame
|
# proxy frame
|
||||||
proxy_frame = ttk.Frame(center_frame2)
|
proxy_frame = ttk.Frame(center_frame2)
|
||||||
proxy_frame.grid(column=0, row=2)
|
proxy_frame.grid(column=0, row=2)
|
||||||
@@ -2370,6 +2399,7 @@ if __name__ == "__main__":
|
|||||||
mock.change_state = lambda state: mock.gui.print(f"State change: {state.value}")
|
mock.change_state = lambda state: mock.gui.print(f"State change: {state.value}")
|
||||||
mock.state_change = lambda state: partial(mock.change_state, state)
|
mock.state_change = lambda state: partial(mock.change_state, state)
|
||||||
mock.request = aiohttp.request
|
mock.request = aiohttp.request
|
||||||
|
# _.set_language("Dansk")
|
||||||
gui = GUIManager(mock) # type: ignore
|
gui = GUIManager(mock) # type: ignore
|
||||||
mock.gui = gui
|
mock.gui = gui
|
||||||
mock.close = gui.stop
|
mock.close = gui.stop
|
||||||
|
|||||||
Reference in new issue
Block a user