From 6657903c57a4d5e63cace8acb7bab919f3856a03 Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Tue, 10 Oct 2023 06:15:05 +0900 Subject: [PATCH] =?UTF-8?q?[bugfix]=20Config=20Window:=20Dropdown=20Menu?= =?UTF-8?q?=20Window.=201px=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3=20?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=99=82=E3=81=ABroot=E3=81=AEgeometry?= =?UTF-8?q?=E3=82=92=E6=89=8B=E5=8B=95=E3=81=A7=E8=A8=88=E7=AE=97(px?= =?UTF-8?q?=E3=81=AF=E5=81=B6=E6=95=B0=E3=81=AB)=E3=81=97=E3=81=A6?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E3=80=82=E8=A1=A8=E7=A4=BA=E6=99=82=E3=81=AB?= =?UTF-8?q?=E3=81=9D=E3=81=AE=E5=80=A4=E3=82=92root=E3=81=AEgeometry?= =?UTF-8?q?=E3=81=AB=E3=82=BB=E3=83=83=E3=83=88=E3=81=99=E3=82=8B=E3=81=93?= =?UTF-8?q?=E3=81=A8=E3=81=AB=E3=82=88=E3=81=A3=E3=81=A6=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?(=E4=BB=8A=E3=81=AE=E6=89=80=E3=81=93=E3=81=AE=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=81=97=E3=81=8B=E3=82=8F=E3=81=8B=E3=82=89=E3=81=AA?= =?UTF-8?q?=E3=81=84)=E3=80=82=20[Refactor]=20Config=20Window:=20Dropdown?= =?UTF-8?q?=20Menu=20Window.=20=E8=89=B2=E6=8C=87=E5=AE=9A=E3=82=92?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=82=B9=E3=82=BF=E3=83=B3=E3=82=B9=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=99=82=E3=81=AB=E6=8C=87=E5=AE=9A=E3=81=95=E3=81=9B?= =?UTF-8?q?=E6=B1=8E=E7=94=A8=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vrct_gui/_CreateDropdownMenuWindow.py | 110 ++++++++++++++++++-------- vrct_gui/vrct_gui.py | 7 ++ 2 files changed, 82 insertions(+), 35 deletions(-) diff --git a/vrct_gui/_CreateDropdownMenuWindow.py b/vrct_gui/_CreateDropdownMenuWindow.py index d11a991c..1f2bbc1d 100644 --- a/vrct_gui/_CreateDropdownMenuWindow.py +++ b/vrct_gui/_CreateDropdownMenuWindow.py @@ -7,7 +7,16 @@ from .ui_utils import bindButtonReleaseFunction, bindEnterAndLeaveColor, bindBut from functools import partial class _CreateDropdownMenuWindow(CTkToplevel): - def __init__(self, settings, view_variable): + def __init__(self, + settings, + view_variable, + window_bg_color, + window_border_color, + values_bg_color, + values_hovered_bg_color, + values_clicked_bg_color, + values_text_color, + ): super().__init__() self.withdraw() self.hide = True @@ -22,6 +31,14 @@ class _CreateDropdownMenuWindow(CTkToplevel): self.resizable(width=False, height=False) + self.window_bg_color=window_bg_color + self.window_border_color=window_border_color + self.values_bg_color=values_bg_color + self.values_hovered_bg_color=values_hovered_bg_color + self.values_clicked_bg_color=values_clicked_bg_color + self.values_text_color=values_text_color + + self.settings = settings self.attach_widget = None self._view_variable = view_variable @@ -70,10 +87,36 @@ class _CreateDropdownMenuWindow(CTkToplevel): self.wrapper_widget = wrapper_widget - self.dropdown_menu_container = CTkFrame(self, corner_radius=0, fg_color="#ff7f50", width=0, height=0) + self.dropdown_menu_container = CTkFrame(self, corner_radius=0, fg_color=self.window_border_color, width=0, height=0) + # self.dropdown_menu_container = CTkFrame(self, corner_radius=0, fg_color="#ff7f50", width=0, height=0) self.dropdown_menu_container.grid(row=0, column=0, sticky="nsew") - self.dropdown_menu_container.grid_remove() + + BORDER_WIDTH=1 + self.scroll_frame_container = CTkScrollableFrame( + self.dropdown_menu_container, + corner_radius=0, + fg_color=self.window_bg_color, + width=0, + height=0, + border_width=0, + ) + self.scroll_frame_container.grid(row=0, column=0, padx=BORDER_WIDTH, pady=BORDER_WIDTH, sticky="nsew") + self.scroll_frame_container._scrollbar.grid_configure(padx=(2, 2)) + 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.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) + + geometry_width = int(self.new_width + self.scroll_frame_container._scrollbar.winfo_width() + (BORDER_WIDTH*2) + 4) + geometry_height = int(self.new_height + (BORDER_WIDTH*2)) self.dropdown_menu_widgets[dropdown_menu_widget_id] = SimpleNamespace() self.dropdown_menu_widgets[dropdown_menu_widget_id] = SimpleNamespace( @@ -84,37 +127,24 @@ class _CreateDropdownMenuWindow(CTkToplevel): dropdown_menu_width=dropdown_menu_width, dropdown_menu_height=dropdown_menu_height, max_display_length=max_display_length, - ) + ), + _settings=SimpleNamespace( + geometry_width=geometry_width, + geometry_height=geometry_height, + ), ) + self.dropdown_menu_container.grid_remove() - 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=(1, 2)) - 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=self.settings.ctm.SB__DROPDOWN_MENU_WINDOW_BG_COLOR) + self.dropdown_menu_values_wrapper = CTkFrame(self.scroll_frame_container, corner_radius=0, fg_color=self.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 = CTkFrame(self.dropdown_menu_values_wrapper, corner_radius=0, fg_color=self.values_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) @@ -128,7 +158,7 @@ class _CreateDropdownMenuWindow(CTkToplevel): corner_radius=0, font=CTkFont(family=self.settings.FONT_FAMILY, size=14, weight="normal"), anchor="w", - text_color=self.settings.ctm.BASIC_TEXT_COLOR, + text_color=self.values_text_color, ) # setattr(self, f"l", __label_widget) @@ -138,11 +168,18 @@ class _CreateDropdownMenuWindow(CTkToplevel): dropdown_menu_values_length = len(dropdown_menu_values) if dropdown_menu_values_length < self.max_display_length: - new_height = int(dropdown_menu_values_length * label_height) + self.new_height = int(dropdown_menu_values_length * label_height) else: - new_height = int(self.max_display_length * label_height) + self.new_height = int(self.max_display_length * label_height) - self.scroll_frame_container.configure(width=self.new_width, height=new_height) + + def makeEven(input_value): + return input_value + 1 if input_value % 2 == 1 else input_value + + + self.new_height = makeEven(self.new_height) + self.new_width = makeEven(self.new_width) + self.scroll_frame_container.configure(width=self.new_width, height=self.new_height) # This is for CustomTkinter's spec change or bug fix. self.scroll_frame_container._scrollbar.configure(height=0) @@ -152,7 +189,7 @@ class _CreateDropdownMenuWindow(CTkToplevel): 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, cursor="hand2") + dropdown_menu_value_wrapper = CTkFrame(self.dropdown_menu_values_wrapper, corner_radius=0, fg_color=self.values_bg_color, width=0, height=0, cursor="hand2") 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) @@ -167,7 +204,7 @@ class _CreateDropdownMenuWindow(CTkToplevel): corner_radius=0, font=CTkFont(family=self.settings.FONT_FAMILY, size=14, weight="normal"), anchor="w", - text_color=self.settings.ctm.BASIC_TEXT_COLOR, + text_color=self.values_text_color, ) # setattr(self, f"l", label_widget) @@ -175,8 +212,8 @@ class _CreateDropdownMenuWindow(CTkToplevel): - 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) + bindEnterAndLeaveColor([dropdown_menu_value_wrapper, label_widget], self.values_hovered_bg_color, self.values_bg_color) + bindButtonPressColor([dropdown_menu_value_wrapper, label_widget], self.values_clicked_bg_color, self.values_bg_color) @@ -201,9 +238,12 @@ class _CreateDropdownMenuWindow(CTkToplevel): 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 + target_data = self.dropdown_menu_widgets[dropdown_menu_widget_id] + target_data.widget.grid() + self.active_dropdown_menu_widget = target_data.widget + + self.geometry("{}x{}".format(target_data._settings.geometry_width, target_data._settings.geometry_height)) + self.deiconify() self._adjustToTargetWidgetGeometry() diff --git a/vrct_gui/vrct_gui.py b/vrct_gui/vrct_gui.py index b3a1d59c..236da886 100644 --- a/vrct_gui/vrct_gui.py +++ b/vrct_gui/vrct_gui.py @@ -36,6 +36,13 @@ class VRCT_GUI(CTk): self.dropdown_menu_window = _CreateDropdownMenuWindow( settings=self.settings.config_window, view_variable=self._view_variable, + + window_bg_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_WINDOW_BG_COLOR, + window_border_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_WINDOW_BORDER_COLOR, + values_bg_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_BG_COLOR, + values_hovered_bg_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_HOVERED_BG_COLOR, + values_clicked_bg_color=self.settings.config_window.ctm.SB__DROPDOWN_MENU_CLICKED_BG_COLOR, + values_text_color=self.settings.config_window.ctm.BASIC_TEXT_COLOR, ) self.config_window = ConfigWindow(