Skip to content

Invalid command name while executing in customtkinter project #90

Open
@4e6anenk0

Description

@4e6anenk0

I tried to set async-tkinter-loop for my project on customtkinter. I haven't added any async method yet. The project runs in VS Code while debugging, everything seems to work, but when I close the application, the following messages appear in the console:

Something like this:

invalid command name "139925939756800update"
    while executing
"139925939756800update"
    ("after" script)
invalid command name "140180485790400check_dpi_scaling"
    while executing
"140180485790400check_dpi_scaling"
    ("after" script)

or one of them:

invalid command name "139925939756800update"
    while executing
"139925939756800update"
    ("after" script)

What could be the problem? How critical is it?

Here is parts of my project:

main.py
if __name__ == "__main__":
    settings = get_settings()
    app = App(settings=settings)
    app.async_mainloop()
app.py
class App(ct.CTk, AsyncCTk):
    def __init__(self, settings: Settings):
        super().__init__()

        self.__settings = settings
        self.geometry(f"{1100}x{580}")
        self.title("App")

        self.minsize(700, 300)

        self.mainframe = MainFrame(self, settings=settings)
        self.mainframe.pack_configure(fill="both", expand=True)

    def update_all(self):
        updated_frame = MainFrame(self, settings=self.__settings)
        self.mainframe.destroy()
        self.mainframe = updated_frame
        self.mainframe.pack_configure(fill="both", expand=True)

    @property
    def settings(self) -> Settings:
        return self.__settings
mainframe.py
class AppProtocol(Protocol):
    def update():
        pass

class MainFrame(Page):
    
    def __init__(self, master: AppProtocol, settings: Settings, **kwargs):
        super().__init__(master, settings, **kwargs)

        self.master = master

        self.__pages: Dict[str, Page] = {}
        self.__default_page: str = None
        self.__current_page: str = None

        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(1, weight=1)

        self.create_sidebar().grid_configure(row=0, column=0, sticky='wns')

        self.init_pages()

    def init_pages(self):
        self.add_page(SettingsPage(self, settings=self.settings))
        self.add_page(HomePage(self, settings=self.settings))
        self.set_default_page('SettingsPage')
        self.show_default_page()

    def create_sidebar(self) -> CTkFrame:
        self.sidebar = Sidebar(self, settings=self.settings, menu_btn_callback=self.on_click_menu_btn, new_macros_callback=self.show_screenshot_action)
        return self.sidebar
    
    def show_screenshot_action(self):
        self.action = ScreenshotAction(self.master)
        self.action.bind('<Escape>', lambda event: self.action.destroy())
        self.action.mainloop()
        
    
    def show_default_page(self):
        print(self.__default_page)
        self.__pages[self.__default_page].grid_configure(row=0, column=1, sticky='wsne')
        self.__current_page = self.__default_page
    
    def show_page(self, page_name: str):
        if self.__current_page == None:
            self.__pages[page_name].grid_configure(row=0, column=1, sticky='wsne')
            self.__current_page = page_name
        elif self.__current_page != page_name:
            self.__pages[self.__current_page].grid_remove()
            self.__pages[page_name].grid_configure(row=0, column=1, sticky='wsne')
            self.__current_page = page_name

    def hide_page(self, page_name: str):
        if self.__current_page == page_name:
            self.__pages[page_name].grid_remove()

    def add_page(self, page: Page) -> Page:
        self.__pages[page.__class__.__name__] = page

    def set_default_page(self, page_name: str):
        self.__default_page = page_name

    def on_click_menu_btn(self, page_name: str):
        self.show_page(page_name)
page.py
class Page(CTkFrame):
    def __init__(self, master: Any, settings: Settings, **kwargs):
        super().__init__(master, **kwargs)
        self.__settings = settings
        self.frame: CTkFrame = None
        self.__master = master

    @property
    def settings(self):
        return self.__settings
    
    def update_all(self):
        self.__master.update_all()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions