from functools import partial from .ui_utils import bindButtonReleaseFunction, bindEnterAndLeaveColor, bindButtonPressColor from utils import callFunctionIfCallable from customtkinter import CTkToplevel, CTkFrame, CTkLabel, CTkFont, CTkScrollableFrame class _CreateSelectableLanguagesWindow(CTkToplevel): def __init__(self, vrct_gui, settings, view_variable): super().__init__() self.withdraw() # configure window self.title("_CreateSelectableLanguagesWindow") self.overrideredirect(True) self.attach = vrct_gui.main_bg_container self.vrct_gui = vrct_gui self.configure(fg_color="black") self.protocol("WM_DELETE_WINDOW", vrct_gui.closeSelectableLanguagesWindow) self.settings = settings self._view_variable = view_variable self.bind("", lambda e: vrct_gui.closeSelectableLanguagesWindow()) self.is_created = False self.selectable_language_window_type = None def createContainer(self, selectable_language_window_type): self.selectable_language_window_type = selectable_language_window_type self.x_pos = self.attach.winfo_rootx() self.y_pos = self.attach.winfo_rooty() self.width_new = self.attach.winfo_width() self.height_new = self.attach.winfo_height() self.geometry('+{}+{}'.format(self.x_pos, self.y_pos)) if self.is_created is True: pass else: self._createContainer() def callbackSelectableLanguages(self, value, _e): if self.selectable_language_window_type == "your_language": callback = self._view_variable.CALLBACK_SELECTED_YOUR_LANGUAGE target_variable = self._view_variable.VAR_YOUR_LANGUAGE elif self.selectable_language_window_type == "target_language": callback = self._view_variable.CALLBACK_SELECTED_TARGET_LANGUAGE target_variable = self._view_variable.VAR_TARGET_LANGUAGE callFunctionIfCallable(callback, value) target_variable.set(value) self.vrct_gui.closeSelectableLanguagesWindow() def _createContainer(self): # self.geometry('{}x{}+{}+{}'.format(self.width_new, self.height_new, self.x_pos, self.y_pos)) # self.geometry('{}x{}+{}+{}'.format(self.width_new, self.height_new, self.x_pos, self.y_pos)) self.rowconfigure(0, minsize=50) self.top_container = CTkFrame(self, corner_radius=0, fg_color=self.settings.ctm.MAIN_BG_COLOR, width=0, height=0) self.top_container.grid(row=0, column=0, sticky="nsew") self.top_container.rowconfigure((0,2), weight=1) self.go_back_button_container = CTkFrame(self.top_container, corner_radius=0, fg_color=self.settings.ctm.GO_BACK_BUTTON_BG_COLOR, width=0, height=0) self.go_back_button_container.grid(row=1, column=0) self.go_back_button_label_wrapper = CTkFrame(self.go_back_button_container, corner_radius=0, fg_color=self.settings.ctm.GO_BACK_BUTTON_BG_COLOR, width=0, height=0) self.go_back_button_label_wrapper.grid(row=0, column=0) self.go_back_button_label = CTkLabel( self.go_back_button_label_wrapper, text="Go back", 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, ) self.go_back_button_label.grid(row=1, column=0, padx=10, pady=10) bindButtonReleaseFunction([self.go_back_button_label_wrapper, self.go_back_button_label], lambda _e: self.vrct_gui.closeSelectableLanguagesWindow()) # self.scroll_frame_container = CTkScrollableFrame(self, corner_radius=0, fg_color=self.settings.ctm.MAIN_BG_COLOR) # self.scroll_frame_container.grid(row=1, column=0, sticky="nsew") self.container = CTkFrame(self, corner_radius=0, fg_color=self.settings.ctm.MAIN_BG_COLOR, width=0, height=0) self.container.grid(row=1, column=0, sticky="nsew") row=0 column=0 for selectable_language_name in self._view_variable.LIST_SELECTABLE_LANGUAGES: self.wrapper = CTkFrame(self.container, corner_radius=0, fg_color=self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR, width=0, height=0) self.wrapper.grid(row=row, column=column, ipadx=6, ipady=6, sticky="nsew") setattr(self, f"{row}_{column}", self.wrapper) self.wrapper.rowconfigure((0,2), weight=1) selectable_language_name_for_text = selectable_language_name.replace("\n", " ") label_widget = CTkLabel( self.wrapper, text=selectable_language_name_for_text, 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)) bindEnterAndLeaveColor([self.wrapper, label_widget], self.settings.ctm.LANGUAGE_BUTTON_BG_HOVERED_COLOR, self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR) bindButtonPressColor([self.wrapper, label_widget], self.settings.ctm.LANGUAGE_BUTTON_BG_CLICKED_COLOR, self.settings.ctm.LANGUAGE_BUTTON_BG_COLOR) callback = partial(self.callbackSelectableLanguages, selectable_language_name) bindButtonReleaseFunction([self.wrapper, label_widget], callback) if row == 16: row=0 column+=1 else: row+=1 self.is_created = True