From b1058efebef77a422881c2ff3e6b5ab82fb2887e Mon Sep 17 00:00:00 2001 From: Sakamoto Shiina <68018796+ShiinaSakamoto@users.noreply.github.com> Date: Fri, 6 Oct 2023 07:35:16 +0900 Subject: [PATCH] =?UTF-8?q?[Refactor]=20Main=20Window:=20Language=20Settin?= =?UTF-8?q?gs.=20Option=20Menu.=20=E9=96=A2=E6=95=B0=E5=88=87=E3=82=8A?= =?UTF-8?q?=E5=87=BA=E3=81=97=E3=80=81=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 --- .../createSidebarLanguagesSettings.py | 78 ++++++++----------- vrct_gui/ui_utils/ui_utils.py | 50 +++++++++++- 2 files changed, 81 insertions(+), 47 deletions(-) diff --git a/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py b/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py index 29497ac3..c739d7db 100644 --- a/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py +++ b/vrct_gui/main_window/widgets/_create_sidebar/createSidebarLanguagesSettings.py @@ -1,6 +1,6 @@ from customtkinter import CTkFont, CTkFrame, CTkLabel, CTkImage -from ....ui_utils import bindEnterAndLeaveColor, bindButtonPressColor, bindButtonReleaseFunction, switchActiveTabAndPassiveTab, switchTabsColor +from ....ui_utils import bindEnterAndLeaveColor, bindButtonPressColor, bindButtonReleaseFunction, switchActiveTabAndPassiveTab, switchTabsColor, createOptionMenuBox from utils import callFunctionIfCallable @@ -51,69 +51,55 @@ def createSidebarLanguagesSettings(settings, main_window, view_variable): def createLanguageSettingBox(parent_widget, var_title_text, title_text_attr_name, arrow_img_attr_name, open_selectable_language_window_command, variable): sls__box = CTkFrame(parent_widget, corner_radius=0, fg_color=settings.ctm.SLS__BOX_BG_COLOR, width=0, height=0) - sls__box.columnconfigure((0,2), weight=1) + sls__box.columnconfigure(1, weight=1) sls__box_wrapper = CTkFrame(sls__box, corner_radius=0, fg_color=settings.ctm.SLS__BOX_BG_COLOR, width=0, height=0) - sls__box_wrapper.grid(row=2, column=1, padx=10, pady=settings.uism.SLS__BOX_IPADY) + sls__box_wrapper.grid(row=2, column=1, padx=10, pady=settings.uism.SLS__BOX_IPADY, sticky="ew") + + sls__box_wrapper.grid_columnconfigure(0, weight=1) + sls__box_label_wrapper = CTkFrame(sls__box_wrapper, corner_radius=0, fg_color=settings.ctm.SLS__BOX_BG_COLOR, width=0, height=0) + sls__box_label_wrapper.grid(row=0, column=0) + + sls__box_label_wrapper.grid_columnconfigure((0,2), weight=1) sls__label = CTkLabel( - sls__box_wrapper, + sls__box_label_wrapper, textvariable=var_title_text, height=0, font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.SLS__BOX_SECTION_TITLE_FONT_SIZE, weight="normal"), text_color=settings.ctm.SLS__BOX_SECTION_TITLE_TEXT_COLOR ) - sls__label.grid(row=0, column=0, pady=(0,settings.uism.SLS__BOX_SECTION_TITLE_BOTTOM_PADY)) + sls__label.grid(row=0, column=1, pady=(0,settings.uism.SLS__BOX_SECTION_TITLE_BOTTOM_PADY)) setattr(main_window, title_text_attr_name, sls__label) + sls__box_optionmenu_wrapper = CTkFrame(sls__box_wrapper, corner_radius=0, fg_color=settings.ctm.SLS__BOX_BG_COLOR, width=0, height=0) + sls__box_optionmenu_wrapper.grid(row=1, column=0, sticky="ew") - sls__selected_language_box = CTkFrame(sls__box_wrapper, corner_radius=4, fg_color=settings.ctm.SLS__DROPDOWN_MENU_BG_COLOR, cursor="hand2") - sls__selected_language_box.grid(row=1, column=0) + sls__box_optionmenu_wrapper.grid_columnconfigure(0, weight=1) + sls__selected_language_box = createOptionMenuBox( + parent_widget=sls__box_optionmenu_wrapper, + optionmenu_bg_color=settings.ctm.SLS__DROPDOWN_MENU_BG_COLOR, + optionmenu_hovered_bg_color=settings.ctm.SLS__DROPDOWN_MENU_HOVERED_BG_COLOR, + optionmenu_clicked_bg_color=settings.ctm.SLS__DROPDOWN_MENU_CLICKED_BG_COLOR, + optionmenu_ipadx=(0,0), + optionmenu_ipady=2, + variable=variable, + font_family=settings.FONT_FAMILY, + font_size=settings.uism.SLS__BOX_DROPDOWN_MENU_FONT_SIZE, + text_color=settings.ctm.LABELS_TEXT_COLOR, + image_file=settings.image_file.ARROW_LEFT.rotate(180), + image_size=(20,20), + command=open_selectable_language_window_command, - - sls__selected_language_box.columnconfigure(0, minsize=200) - sls__selected_language_box.rowconfigure(0, minsize=30) - sls__selected_language_label_frame = CTkFrame(sls__selected_language_box, corner_radius=0, fg_color=settings.ctm.SLS__DROPDOWN_MENU_BG_COLOR) - sls__selected_language_label_frame.grid(row=0, column=0) - - sls__selected_language_label = CTkLabel( - sls__selected_language_label_frame, - textvariable=variable, - height=0, - # anchor="center", - font=CTkFont(family=settings.FONT_FAMILY, size=settings.uism.SLS__BOX_DROPDOWN_MENU_FONT_SIZE, weight="normal"), - text_color=settings.ctm.LABELS_TEXT_COLOR + optionmenu_position="center", + setattr_widget=main_window, + image_widget_attr_name=arrow_img_attr_name, ) - sls__selected_language_label.grid(row=0, column=0, pady=2) - setattr(main_window, title_text_attr_name, sls__selected_language_label) - - - sls__selected_language_arrow_img = CTkLabel( - sls__selected_language_box, - text=None, - corner_radius=0, - height=0, - image=CTkImage((settings.image_file.ARROW_LEFT).rotate(180),size=(20,20)) - ) - setattr(main_window, arrow_img_attr_name, sls__selected_language_arrow_img) - - - - sls__selected_language_arrow_img.grid(row=0, column=1, padx=0, pady=0) - - - - - bindEnterAndLeaveColor([sls__selected_language_label_frame, sls__selected_language_box, sls__selected_language_label, sls__selected_language_arrow_img], settings.ctm.SLS__DROPDOWN_MENU_HOVERED_BG_COLOR, settings.ctm.SLS__DROPDOWN_MENU_BG_COLOR) - bindButtonPressColor([sls__selected_language_label_frame, sls__selected_language_box, sls__selected_language_label, sls__selected_language_arrow_img], settings.ctm.SLS__DROPDOWN_MENU_CLICKED_BG_COLOR, settings.ctm.SLS__DROPDOWN_MENU_HOVERED_BG_COLOR) - - - - bindButtonReleaseFunction([sls__selected_language_label_frame, sls__selected_language_box, sls__selected_language_label, sls__selected_language_arrow_img], open_selectable_language_window_command) + sls__selected_language_box.grid(row=0, column=0, sticky="ew") return sls__box diff --git a/vrct_gui/ui_utils/ui_utils.py b/vrct_gui/ui_utils/ui_utils.py index 1955fbfa..a68d1743 100644 --- a/vrct_gui/ui_utils/ui_utils.py +++ b/vrct_gui/ui_utils/ui_utils.py @@ -1,7 +1,7 @@ from os import path as os_path from PIL.Image import open as Image_open, LANCZOS -from customtkinter import CTkFrame, CTkLabel, CTkImage +from customtkinter import CTkFrame, CTkLabel, CTkImage, CTkFont def getImagePath(file_name): # root\img\file_name @@ -140,3 +140,51 @@ def createButtonWithImage(parent_widget, button_fg_color, button_enter_color, bu ) 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, setattr_widget=None, image_widget_attr_name=None): + + option_menu_box = CTkFrame(parent_widget, corner_radius=4, fg_color=optionmenu_bg_color, cursor="hand2") + + option_menu_box.grid_columnconfigure(0, weight=1) + option_menu_box.grid_rowconfigure(0, weight=1) + optionmenu_label_wrapper = CTkFrame(option_menu_box, corner_radius=0, fg_color=optionmenu_bg_color) + optionmenu_label_wrapper.grid(row=0, column=0, sticky="ew") + + LABEL_COLUMN=0 + if optionmenu_position == "center": + optionmenu_label_wrapper.grid_columnconfigure((0,2), weight=1) + LABEL_COLUMN=1 + + optionmenu_label_widget = CTkLabel( + optionmenu_label_wrapper, + textvariable=variable, + height=0, + font=CTkFont(family=font_family, size=font_size, weight="normal"), + text_color=text_color + ) + optionmenu_label_widget.grid(row=0, column=LABEL_COLUMN, padx=optionmenu_ipadx, pady=optionmenu_ipady) + + + optionmenu_img_widget = CTkLabel( + option_menu_box, + text=None, + corner_radius=0, + height=0, + image=CTkImage(image_file, size=image_size) + ) + + if image_widget_attr_name is not None: + setattr(setattr_widget, image_widget_attr_name, optionmenu_img_widget) + + optionmenu_img_widget.grid(row=0, column=1, padx=0, pady=0) + + + bindEnterAndLeaveColor([optionmenu_label_wrapper, option_menu_box, optionmenu_label_widget, optionmenu_img_widget], optionmenu_hovered_bg_color, optionmenu_bg_color) + bindButtonPressColor([optionmenu_label_wrapper, option_menu_box, optionmenu_label_widget, optionmenu_img_widget], optionmenu_clicked_bg_color, optionmenu_hovered_bg_color) + + + + bindButtonReleaseFunction([optionmenu_label_wrapper, option_menu_box, optionmenu_label_widget, optionmenu_img_widget], command) + + return option_menu_box \ No newline at end of file