[Update] Config Window: DropdownMenu追加。前回コミットではOption Menuをクリックしても何も起こらなかったが、DropdownMenuとして選択肢を表示。選択された際の機能も今まで通り。

grab_set廃止。focus_setやliftを使ってこちらでコントロール。 理由は、設定画面上で新たにDropdown Menu Windowを生成し、選択肢をクリックする際邪魔になるため。
This commit is contained in:
Sakamoto Shiina
2023-10-08 11:13:18 +09:00
parent 8dd1ddd6ac
commit 7e33f04baa
7 changed files with 330 additions and 17 deletions

19
view.py
View File

@@ -692,14 +692,20 @@ class View():
def updateList_MicHost(self, new_mic_host_list:list): def updateList_MicHost(self, new_mic_host_list:list):
self.view_variable.LIST_MIC_HOST = new_mic_host_list self.view_variable.LIST_MIC_HOST = new_mic_host_list
# vrct_gui.config_window.sb__optionmenu_mic_host.configure(values=new_mic_host_list) vrct_gui.dropdown_menu_window.updateDropdownMenuValues(
dropdown_menu_widget_id="sb__optionmenu_mic_host",
dropdown_menu_values=new_mic_host_list,
)
def updateSelected_MicHost(self, selected_mic_host_name:str): def updateSelected_MicHost(self, selected_mic_host_name:str):
self.view_variable.VAR_MIC_HOST.set(selected_mic_host_name) self.view_variable.VAR_MIC_HOST.set(selected_mic_host_name)
def updateList_MicDevice(self, new_mic_device_list): def updateList_MicDevice(self, new_mic_device_list:list):
self.view_variable.LIST_MIC_DEVICE = new_mic_device_list self.view_variable.LIST_MIC_DEVICE = new_mic_device_list
# vrct_gui.config_window.sb__optionmenu_mic_device.configure(values=new_mic_device_list) vrct_gui.dropdown_menu_window.updateDropdownMenuValues(
dropdown_menu_widget_id="sb__optionmenu_mic_device",
dropdown_menu_values=new_mic_device_list,
)
def updateSelected_MicDevice(self, default_selected_mic_device_name:str): def updateSelected_MicDevice(self, default_selected_mic_device_name:str):
self.view_variable.VAR_MIC_DEVICE.set(default_selected_mic_device_name) self.view_variable.VAR_MIC_DEVICE.set(default_selected_mic_device_name)
@@ -714,9 +720,12 @@ class View():
vrct_gui.config_window.sb__progressbar_x_slider__progressbar_mic_energy_threshold.set(0) vrct_gui.config_window.sb__progressbar_x_slider__progressbar_mic_energy_threshold.set(0)
def updateList_SpeakerDevice(self, new_speaker_device_list): def updateList_SpeakerDevice(self, new_speaker_device_list:list):
self.view_variable.LIST_SPEAKER_DEVICE = new_speaker_device_list self.view_variable.LIST_SPEAKER_DEVICE = new_speaker_device_list
# vrct_gui.config_window.sb__optionmenu_speaker_device.configure(values=new_speaker_device_list) vrct_gui.dropdown_menu_window.updateDropdownMenuValues(
dropdown_menu_widget_id="sb__optionmenu_speaker_device",
dropdown_menu_values=new_speaker_device_list,
)
@staticmethod @staticmethod
def updateSetProgressBar_SpeakerEnergy(new_speaker_energy): def updateSetProgressBar_SpeakerEnergy(new_speaker_energy):

View File

@@ -0,0 +1,268 @@
from types import SimpleNamespace
from customtkinter import CTkToplevel, CTkFrame, CTkLabel, CTkFont, CTkScrollableFrame
from time import sleep
from .ui_utils import bindButtonReleaseFunction, bindEnterAndLeaveColor, bindButtonPressColor, getLatestWidth, getLatestHeight
from functools import partial
class _CreateDropdownMenuWindow(CTkToplevel):
def __init__(self, settings, view_variable):
super().__init__()
self.withdraw()
self.hide = True
self.title("")
self.overrideredirect(True)
self.wm_attributes("-alpha", 0)
self.wm_attributes("-toolwindow", True)
self.resizable(width=False, height=False)
self.settings = settings
self.attach_widget = None
self._view_variable = view_variable
self.wrapper_widget = None
self.dropdown_menu_widgets = {}
self.active_dropdown_menu_widget = None
self.attach_widget_width = None
self.attach_widget_height = None
self.attach_widget_x_pos = None
self.attach_widget_y_pos = None
self.x_pos = None
self.y_pos = None
# self.rowconfigure(0,weight=1)
# self.columnconfigure(0,weight=1)
# The color code [#bb4448] is a mixture of [#a9555c] and [#cc3333] (for a redder shade).
def updateDropdownMenuValues(self, dropdown_menu_widget_id, dropdown_menu_values):
self.dropdown_menu_widgets[dropdown_menu_widget_id].widget.destroy()
self.createDropdownMenuBox(
dropdown_menu_widget_id=dropdown_menu_widget_id,
dropdown_menu_values=dropdown_menu_values,
command=self.dropdown_menu_widgets[dropdown_menu_widget_id].command,
wrapper_widget=self.dropdown_menu_widgets[dropdown_menu_widget_id].wrapper_widget,
)
def createDropdownMenuBox(self, dropdown_menu_widget_id, dropdown_menu_values, command, wrapper_widget):
self.wrapper_widget = wrapper_widget
self.dropdown_menu_container = CTkFrame(self, corner_radius=0, fg_color="#bb4448", width=0, height=0)
self.dropdown_menu_container.grid(row=0, column=0, sticky="nsew")
self.dropdown_menu_container.grid_remove()
self.dropdown_menu_widgets[dropdown_menu_widget_id] = SimpleNamespace()
self.dropdown_menu_widgets[dropdown_menu_widget_id] = SimpleNamespace(
widget=self.dropdown_menu_container,
command=command,
wrapper_widget=wrapper_widget,
)
self.scroll_frame_container = CTkScrollableFrame(
self.dropdown_menu_container,
corner_radius=0,
fg_color=self.settings.ctm.SB__DROPDOWN_MENU_WINDOW_BG_COLOR,
width=0,
height=0,
border_color=self.settings.ctm.SB__DROPDOWN_MENU_WINDOW_BORDER_COLOR,
border_width=1,
)
self.scroll_frame_container.grid(row=0, column=0, sticky="nsew")
self.scroll_frame_container._scrollbar.grid_configure(padx=3)
self.scroll_frame_container.grid_columnconfigure(0, weight=1)
self.dropdown_menu_values_box = CTkFrame(self.scroll_frame_container, corner_radius=0, fg_color=self.settings.ctm.SB__DROPDOWN_MENU_WINDOW_BG_COLOR, width=0, height=0)
self.dropdown_menu_values_box.grid(row=0, column=0, sticky="nsew")
self.dropdown_menu_values_box.grid_columnconfigure(0, weight=1)
self._createDropdownMenuValues(dropdown_menu_widget_id, dropdown_menu_values, command)
def _createDropdownMenuValues(self, dropdown_menu_widget_id, dropdown_menu_values, command):
# self.dropdown_menu_values_wrapper = CTkFrame(self.scroll_frame_container, corner_radius=0, fg_color="red", width=0, height=0)
self.dropdown_menu_values_wrapper = CTkFrame(self.scroll_frame_container, corner_radius=0, fg_color=self.settings.ctm.SB__DROPDOWN_MENU_WINDOW_BG_COLOR)
self.dropdown_menu_values_wrapper.grid(row=0, column=0, sticky="nsew")
self.dropdown_menu_values_wrapper.grid_columnconfigure(0, weight=1)
# for get to the height__________________
__dropdown_menu_value_wrapper = CTkFrame(self.dropdown_menu_values_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__DROPDOWN_MENU_BG_COLOR, width=0, height=0)
__dropdown_menu_value_wrapper.grid(row=0, column=0, ipadx=6, ipady=6, sticky="nsew")
setattr(self, f"{dropdown_menu_widget_id}__{0}", __dropdown_menu_value_wrapper)
__dropdown_menu_value_wrapper.grid_rowconfigure((0,2), weight=1)
__dropdown_menu_value_wrapper.grid_columnconfigure(0, weight=1)
__label_widget = CTkLabel(
__dropdown_menu_value_wrapper,
text="Aa",
height=0,
corner_radius=0,
font=CTkFont(family=self.settings.FONT_FAMILY, size=14, weight="normal"),
anchor="w",
text_color=self.settings.ctm.BASIC_TEXT_COLOR,
)
# setattr(self, f"l", __label_widget)
__label_widget.grid(row=1, column=0, padx=(8,0), sticky="w")
label_height = getLatestHeight(__dropdown_menu_value_wrapper)
# ______________________________________
dropdown_menu_values_length = len(dropdown_menu_values)
if dropdown_menu_values_length <= 3:
self.scroll_frame_container.configure(width=200, height=int(dropdown_menu_values_length * label_height))
# self.geometry("{}x{}".format(300, int(dropdown_menu_values_length * label_height)))
# self.geometry("{}x{}".format(300, int(dropdown_menu_values_length * label_height)))
# self.scroll_frame_container._parent_canvas.configure(height=20)
else:
self.scroll_frame_container.configure(width=200, height=200)
# self.geometry("{}x{}".format(200, 200))
# self.scroll_frame_container._parent_canvas.configure(height=20)
# This is for CustomTkinter's spec change or bug fix.
self.scroll_frame_container._scrollbar.configure(height=0)
row=0
for dropdown_menu_value in dropdown_menu_values:
dropdown_menu_value_wrapper = CTkFrame(self.dropdown_menu_values_wrapper, corner_radius=0, fg_color=self.settings.ctm.SB__DROPDOWN_MENU_BG_COLOR, width=0, height=0)
dropdown_menu_value_wrapper.grid(row=row, column=0, ipadx=6, ipady=6, sticky="nsew")
setattr(self, f"{dropdown_menu_widget_id}__{row}", dropdown_menu_value_wrapper)
dropdown_menu_value_wrapper.grid_rowconfigure((0,2), weight=1)
dropdown_menu_value_wrapper.grid_columnconfigure(0, weight=1)
label_widget = CTkLabel(
dropdown_menu_value_wrapper,
text=dropdown_menu_value,
height=0,
corner_radius=0,
font=CTkFont(family=self.settings.FONT_FAMILY, size=14, weight="normal"),
anchor="w",
text_color=self.settings.ctm.BASIC_TEXT_COLOR,
)
# setattr(self, f"l", label_widget)
label_widget.grid(row=1, column=0, padx=(8,0), sticky="w")
bindEnterAndLeaveColor([dropdown_menu_value_wrapper, label_widget], self.settings.ctm.SB__DROPDOWN_MENU_HOVERED_BG_COLOR, self.settings.ctm.SB__DROPDOWN_MENU_BG_COLOR)
bindButtonPressColor([dropdown_menu_value_wrapper, label_widget], self.settings.ctm.SB__DROPDOWN_MENU_CLICKED_BG_COLOR, self.settings.ctm.SB__DROPDOWN_MENU_BG_COLOR)
def optimizedCommand(value, _e):
command(value)
self._withdraw()
callback = partial(optimizedCommand, dropdown_menu_value)
bindButtonReleaseFunction([dropdown_menu_value_wrapper, label_widget], callback)
row+=1
def show(self, dropdown_menu_widget_id, target_widget):
if self.hide is False: return
self.wm_attributes("-alpha", 0)
self.attach_widget = target_widget
if self.active_dropdown_menu_widget is not None:
self.active_dropdown_menu_widget.grid_remove()
target_Widget = self.dropdown_menu_widgets[dropdown_menu_widget_id].widget
target_Widget.grid()
self.active_dropdown_menu_widget = target_Widget
self.deiconify()
self._adjustToTargetWidgetGeometry()
self.BIND_CONFIGURE_FUNC_ID = self.attach_widget.winfo_toplevel().bind("<Configure>", self._adjustToTargetWidgetGeometry, "+")
self.BIND_UNMAP_FUNC_ID = self.attach_widget.bind("<Unmap>", self._withdraw, "+")
self.BIND_BUTTON_1_FUNC_ID = self.attach_widget.winfo_toplevel().bind("<Button-1>", self._withdraw, "+")
self.hide = False
for i in range(0,91,10):
if not self.winfo_exists():
break
self.attributes("-alpha", i/100)
self.update()
sleep(1/100)
self.wm_attributes("-alpha", 1)
self.update()
def _withdraw(self, e=None):
self.withdraw()
self.attach_widget.winfo_toplevel().unbind("<Configure>", self.BIND_CONFIGURE_FUNC_ID)
self.attach_widget.unbind("<Unmap>", self.BIND_UNMAP_FUNC_ID)
self.attach_widget.winfo_toplevel().unbind("<Button-1>", self.BIND_BUTTON_1_FUNC_ID)
self.hide = True
def _adjustToTargetWidgetGeometry(self, e=None):
if not self.attach_widget.winfo_exists():
return
self.attach_widget.update_idletasks()
self.update()
if self.attach_widget_x_pos == self.attach_widget.winfo_rootx() and self.attach_widget_y_pos == self.attach_widget.winfo_rooty():
self.lift()
return
self.wrapper_widget_y_pos = self.wrapper_widget.winfo_rooty()
self.wrapper_widget_bottom_y_pos = self.wrapper_widget_y_pos + self.wrapper_widget.winfo_height()
self.attach_widget_width = self.attach_widget.winfo_width()
self.attach_widget_height = self.attach_widget.winfo_height()
self.attach_widget_x_pos = self.attach_widget.winfo_rootx()
self.attach_widget_y_pos = self.attach_widget.winfo_rooty()
self.y_pos = int(self.attach_widget_y_pos + self.attach_widget_height + 4)
if self.wrapper_widget_y_pos > self.y_pos or self.y_pos > self.wrapper_widget_bottom_y_pos:
self.hideTemporarily()
else:
if self.winfo_exists():
self.deiconify()
if self.winfo_width() >= self.attach_widget_width:
self.x_pos = int(self.attach_widget_x_pos - (self.winfo_width() - self.attach_widget_width))
else:
self.x_pos = self.attach_widget_x_pos
self.geometry("+{}+{}".format(self.x_pos, self.y_pos))
self.lift()
def hideTemporarily(self):
self.withdraw()

View File

@@ -4,6 +4,7 @@ from typing import Union
from customtkinter import CTkOptionMenu, CTkFont, CTkFrame, CTkLabel, CTkRadioButton, CTkEntry, CTkSlider, CTkSwitch, CTkCheckBox, CTkProgressBar from customtkinter import CTkOptionMenu, CTkFont, CTkFrame, CTkLabel, CTkRadioButton, CTkEntry, CTkSlider, CTkSwitch, CTkCheckBox, CTkProgressBar
from vrct_gui.ui_utils import createButtonWithImage, getLatestWidth, createOptionMenuBox from vrct_gui.ui_utils import createButtonWithImage, getLatestWidth, createOptionMenuBox
from vrct_gui import vrct_gui
SETTING_BOX_COLUMN = 1 SETTING_BOX_COLUMN = 1
@@ -14,6 +15,14 @@ class _SettingBoxGenerator():
self.parent_widget = parent_widget self.parent_widget = parent_widget
self.settings = settings self.settings = settings
self.dropdown_menu_window = vrct_gui.vrct_gui.dropdown_menu_window
# self.dropdown_menu_window = _CreateDropdownMenuWindow(
# settings=self.settings,
# view_variable=self.view_variable,
# wrapper_widget=self.config_window.main_bg_container,
# )
def _createSettingBoxFrame(self, for_var_label_text, for_var_desc_text): def _createSettingBoxFrame(self, for_var_label_text, for_var_desc_text):
setting_box_frame = CTkFrame(self.parent_widget, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0) setting_box_frame = CTkFrame(self.parent_widget, corner_radius=0, fg_color=self.settings.ctm.SB__BG_COLOR, width=0, height=0)
@@ -76,6 +85,17 @@ class _SettingBoxGenerator():
def createSettingBoxDropdownMenu(self, for_var_label_text, for_var_desc_text, optionmenu_attr_name, command, variable=None, dropdown_menu_values=None): def createSettingBoxDropdownMenu(self, for_var_label_text, for_var_desc_text, optionmenu_attr_name, command, variable=None, dropdown_menu_values=None):
(setting_box_frame, setting_box_item_frame) = self._createSettingBoxFrame(for_var_label_text, for_var_desc_text) (setting_box_frame, setting_box_item_frame) = self._createSettingBoxFrame(for_var_label_text, for_var_desc_text)
def adjustedCommand(value):
variable.set(value)
command(value)
self.dropdown_menu_window.createDropdownMenuBox(
dropdown_menu_widget_id=optionmenu_attr_name,
dropdown_menu_values=dropdown_menu_values,
command=adjustedCommand,
wrapper_widget=self.config_window.main_bg_container,
)
option_menu_widget = createOptionMenuBox( option_menu_widget = createOptionMenuBox(
parent_widget=setting_box_item_frame, parent_widget=setting_box_item_frame,
optionmenu_bg_color=self.settings.ctm.SB__OPTIONMENU_BG_COLOR, optionmenu_bg_color=self.settings.ctm.SB__OPTIONMENU_BG_COLOR,
@@ -92,12 +112,10 @@ class _SettingBoxGenerator():
text_color=self.settings.ctm.LABELS_TEXT_COLOR, text_color=self.settings.ctm.LABELS_TEXT_COLOR,
image_file=self.settings.image_file.ARROW_LEFT.rotate(90), image_file=self.settings.image_file.ARROW_LEFT.rotate(90),
image_size=(14,14), image_size=(14,14),
command=lambda _e: print(_e), optionmenu_clicked_command=lambda _e: self.dropdown_menu_window.show(
# command=open_selectable_language_window_command, dropdown_menu_widget_id=optionmenu_attr_name,
target_widget=option_menu_widget,
# optionmenu_position="center", ),
# setattr_widget=main_window,
# image_widget_attr_name=arrow_img_attr_name,
) )
option_menu_widget.grid(row=1, column=SETTING_BOX_COLUMN, sticky="e") option_menu_widget.grid(row=1, column=SETTING_BOX_COLUMN, sticky="e")

View File

@@ -93,7 +93,7 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable):
text_color=settings.ctm.LABELS_TEXT_COLOR, text_color=settings.ctm.LABELS_TEXT_COLOR,
image_file=settings.image_file.ARROW_LEFT.rotate(180), image_file=settings.image_file.ARROW_LEFT.rotate(180),
image_size=(20,20), image_size=(20,20),
command=open_selectable_language_window_command, optionmenu_clicked_command=open_selectable_language_window_command,
optionmenu_position="center", optionmenu_position="center",
setattr_widget=main_window, setattr_widget=main_window,

View File

@@ -41,6 +41,7 @@ class ColorThemeManager():
self.DARK_450_COLOR = "#b8b9bd" self.DARK_450_COLOR = "#b8b9bd"
self.DARK_500_COLOR = "#a9aaae" self.DARK_500_COLOR = "#a9aaae"
self.DARK_600_COLOR = "#7f8084" self.DARK_600_COLOR = "#7f8084"
# self.DARK_650_COLOR = "#75767a"
self.DARK_700_COLOR = "#6a6c6f" self.DARK_700_COLOR = "#6a6c6f"
self.DARK_725_COLOR = "#636467" self.DARK_725_COLOR = "#636467"
self.DARK_750_COLOR = "#5b5c5f" self.DARK_750_COLOR = "#5b5c5f"
@@ -233,6 +234,12 @@ class ColorThemeManager():
self.config_window.SB__OPTIONMENU_BG_COLOR = self.DARK_925_COLOR self.config_window.SB__OPTIONMENU_BG_COLOR = self.DARK_925_COLOR
self.config_window.SB__OPTIONMENU_HOVERED_BG_COLOR = self.DARK_850_COLOR self.config_window.SB__OPTIONMENU_HOVERED_BG_COLOR = self.DARK_850_COLOR
self.config_window.SB__OPTIONMENU_CLICKED_BG_COLOR = self.DARK_950_COLOR self.config_window.SB__OPTIONMENU_CLICKED_BG_COLOR = self.DARK_950_COLOR
self.config_window.SB__DROPDOWN_MENU_WINDOW_BG_COLOR = self.config_window.MAIN_BG_COLOR
self.config_window.SB__DROPDOWN_MENU_WINDOW_BORDER_COLOR = self.DARK_600_COLOR
# self.config_window.SB__DROPDOWN_MENU_WINDOW_BG_COLOR = self.DARK_700_COLOR
self.config_window.SB__DROPDOWN_MENU_BG_COLOR = self.DARK_875_COLOR
self.config_window.SB__DROPDOWN_MENU_HOVERED_BG_COLOR = self.DARK_800_COLOR
self.config_window.SB__DROPDOWN_MENU_CLICKED_BG_COLOR = self.DARK_900_COLOR
self.config_window.SB__SLIDER_BUTTON_COLOR = self.DARK_700_COLOR self.config_window.SB__SLIDER_BUTTON_COLOR = self.DARK_700_COLOR
self.config_window.SB__SLIDER_BUTTON_HOVERED_COLOR = self.DARK_600_COLOR self.config_window.SB__SLIDER_BUTTON_HOVERED_COLOR = self.DARK_600_COLOR

View File

@@ -142,7 +142,7 @@ def createButtonWithImage(parent_widget, button_fg_color, button_enter_color, bu
return button_wrapper return button_wrapper
def createOptionMenuBox(parent_widget, optionmenu_bg_color, optionmenu_hovered_bg_color, optionmenu_clicked_bg_color, optionmenu_ipadx, optionmenu_ipady, variable, font_family, font_size, text_color, image_file, image_size, command, optionmenu_position=None, optionmenu_ipady_between_img=0, optionmenu_min_height=None, optionmenu_min_width=None, setattr_widget=None, image_widget_attr_name=None): def createOptionMenuBox(parent_widget, optionmenu_bg_color, optionmenu_hovered_bg_color, optionmenu_clicked_bg_color, optionmenu_ipadx, optionmenu_ipady, variable, font_family, font_size, text_color, image_file, image_size, optionmenu_clicked_command, optionmenu_position=None, optionmenu_ipady_between_img=0, optionmenu_min_height=None, optionmenu_min_width=None, setattr_widget=None, image_widget_attr_name=None):
option_menu_box = CTkFrame(parent_widget, corner_radius=6, fg_color=optionmenu_bg_color, cursor="hand2") option_menu_box = CTkFrame(parent_widget, corner_radius=6, fg_color=optionmenu_bg_color, cursor="hand2")
@@ -189,6 +189,6 @@ def createOptionMenuBox(parent_widget, optionmenu_bg_color, optionmenu_hovered_b
bindButtonReleaseFunction([optionmenu_label_wrapper, option_menu_box, optionmenu_label_widget, optionmenu_img_widget], command) bindButtonReleaseFunction([optionmenu_label_wrapper, option_menu_box, optionmenu_label_widget, optionmenu_img_widget], optionmenu_clicked_command)
return option_menu_box return option_menu_box

View File

@@ -6,6 +6,7 @@ from ._CreateSelectableLanguagesWindow import _CreateSelectableLanguagesWindow
from ._CreateModalWindow import _CreateModalWindow from ._CreateModalWindow import _CreateModalWindow
from ._CreateErrorWindow import _CreateErrorWindow from ._CreateErrorWindow import _CreateErrorWindow
from ._CreateDropdownMenuWindow import _CreateDropdownMenuWindow
from ._changeMainWindowWidgetsStatus import _changeMainWindowWidgetsStatus from ._changeMainWindowWidgetsStatus import _changeMainWindowWidgetsStatus
from ._changeConfigWindowWidgetsStatus import _changeConfigWindowWidgetsStatus from ._changeConfigWindowWidgetsStatus import _changeConfigWindowWidgetsStatus
from ._printToTextbox import _printToTextbox from ._printToTextbox import _printToTextbox
@@ -21,6 +22,7 @@ class VRCT_GUI(CTk):
super().__init__() super().__init__()
self.adjusted_event=None self.adjusted_event=None
self.BIND_CONFIGURE_ADJUSTED_GEOMETRY_FUNC_ID=None self.BIND_CONFIGURE_ADJUSTED_GEOMETRY_FUNC_ID=None
self.BIND_FOCUS_IN_MODAL_WINDOW_LIFT_CONFIG_WINDOW_FUNC_ID=None
def createGUI(self, settings, view_variable): def createGUI(self, settings, view_variable):
@@ -33,6 +35,11 @@ class VRCT_GUI(CTk):
view_variable=self._view_variable view_variable=self._view_variable
) )
self.dropdown_menu_window = _CreateDropdownMenuWindow(
settings=self.settings.config_window,
view_variable=self._view_variable,
)
self.config_window = ConfigWindow( self.config_window = ConfigWindow(
vrct_gui=self, vrct_gui=self,
settings=self.settings.config_window, settings=self.settings.config_window,
@@ -74,20 +81,20 @@ class VRCT_GUI(CTk):
self.adjustToMainWindowGeometry() self.adjustToMainWindowGeometry()
self.modal_window.deiconify() self.modal_window.deiconify()
self.BIND_CONFIGURE_ADJUSTED_GEOMETRY_FUNC_ID = self.bind("<Configure>", self.adjustToMainWindowGeometry) self.BIND_CONFIGURE_ADJUSTED_GEOMETRY_FUNC_ID = self.bind("<Configure>", self.adjustToMainWindowGeometry, "+")
self.BIND_FOCUS_IN_MODAL_WINDOW_LIFT_CONFIG_WINDOW_FUNC_ID = self.modal_window.bind("<FocusIn>", lambda _e: self.config_window.lift(), "+")
self.config_window.deiconify() self.config_window.deiconify()
self.config_window.focus_set() self.config_window.focus_set()
self.config_window.grab_set()
def closeConfigWindow(self): def closeConfigWindow(self):
callFunctionIfCallable(self._view_variable.CALLBACK_CLOSE_CONFIG_WINDOW) callFunctionIfCallable(self._view_variable.CALLBACK_CLOSE_CONFIG_WINDOW)
self.config_window.withdraw() self.config_window.withdraw()
self.config_window.grab_release()
self.modal_window.withdraw() self.modal_window.withdraw()
self.unbind("<Configure>", self.BIND_CONFIGURE_ADJUSTED_GEOMETRY_FUNC_ID) self.unbind("<Configure>", self.BIND_CONFIGURE_ADJUSTED_GEOMETRY_FUNC_ID)
self.modal_window.unbind("<FocusIn>", self.BIND_FOCUS_IN_MODAL_WINDOW_LIFT_CONFIG_WINDOW_FUNC_ID)
self.adjusted_event=None self.adjusted_event=None
@@ -200,6 +207,10 @@ class VRCT_GUI(CTk):
self.after(150, lambda: self.config_window.lift()) self.after(150, lambda: self.config_window.lift())
elif self.adjusted_event is None: elif self.adjusted_event is None:
self.after(150, lambda: self.config_window.lift()) self.after(150, lambda: self.config_window.lift())
else:
pass
self.config_window.focus_set()
if e is not None: if e is not None:
self.adjusted_event=str(e) self.adjusted_event=str(e)