Не меняется цветовая палитра у тем в Customtkinter

import customtkinter

customtkinter.set_appearance_mode("system")
customtkinter.set_default_color_theme(r"C:\violet.json")
root = customtkinter.CTk()
root.geometry("1500x800")
root.title("ctk")

Custom = customtkinter.StringVar(value="violet")

def themecustom(*args):
    selected_theme = Custom.get()
    if selected_theme == "violet":
        customtkinter.set_default_color_theme(r"C:\violet.json")
    elif selected_theme == "carrot":
        customtkinter.set_default_color_theme(r"C:\coffee.json")
    else:
        customtkinter.set_default_color_theme(r"C:\sky.json")

ThemCustom = customtkinter.CTkOptionMenu(root, font=("Helvetica Neue", 20, "bold"),
                                          values=["violet", "carrot", "sky"], variable=Custom)
Custom.trace_add('write', themecustom)

Ответы (1 шт):

Автор решения: Donovan

Данное решение - костыль, но если вам оно нужно срочно, то:

У нас есть часть смены тем:

import customtkinter as ctk

def themecustom(*args):
    selected_theme = Custom.get()
    if selected_theme == "violet":
        ctk.set_default_color_theme(r"C:\violet.json")
    elif selected_theme == "carrot":
        ctk.set_default_color_theme(r"C:\coffee.json") 
    else:
        ctk.set_default_color_theme(r"C:\sky.json")

    # Добавляем часть с перезагрузкой окна
    root.destroy()
    create_main_window()

И добавляем в код функцию create_main_window(), перенося туда создание главного окна:

def create_main_window():
    global root, ThemCustom, Custom

    root = ctk.CTk()
    root.geometry("1500x800")
    root.title("ctk")

    Custom = ctk.StringVar(value="violet")

    ThemCustom = ctk.CTkOptionMenu(root, font=("Helvetica Neue", 20, "bold"), values=["violet", "carrot", "sky"], variable=Custom)
    ThemCustom.pack()

    Custom.trace_add('write', themecustom)

    root.mainloop()

create_main_window()

При смене темы окно будет моргать, но тема поменяется.

→ Ссылка