Ошибка при динамическом перезапуске программы Tkinter путем уничтожения root и повторного создания путем вызова функций

      import configparser
from tkinter import *
from tkinter import filedialog,messagebox
from tkinter.filedialog import asksaveasfile
from customtkinter import *
import os
import time
import wikipedia
config=configparser.ConfigParser()
config.read("config.ini")
def change_config():
    messagebox.showinfo("Information","App is going to restart in few seconds")
    print(mode.get())
    print(color.get())
    global location
    config.set("THEME","mode",str(mode.get()))
    config.set("VOICE","voice",str(gender.get()))
    if color.get() =="pink":
        location="C:/Users/DELL/Documents/python programs/notepad/custom_theme.json"
        config.set("THEME","color",location)
    else :
        config.set("THEME","color",color.get())
    with open("config.ini","w") as configfile:
        config.write(configfile)
    restart()

def main():
    global root,label,frame1,config_color,config_mode,config_gender
    root=CTk()
    root.geometry("700x600")
    root.resizable(0,0)
    root.title("Notepad")
    frame1=CTkFrame(root,width=150,height=580)
    frame1.pack_propagate(False)
    frame1.place(x=10,y=10)
    config_color=config.get("THEME","color")
    config_mode=config.get("THEME","mode")
    config_gender=config.get("VOICE","voice")
    set_appearance_mode(config_mode)
    set_default_color_theme(config_color)

    label=CTkLabel(root,text="File",width=520,height=40,font=("Algerian",30))
    label.place(x=170,y=10)

    global S
    global text_area
    text_area=CTkTextbox(root,height=580,width=520,) 
    text_area.place(x=170,y=60)

    global button,commands,button_text
    button_text="Settings"
    commands=settings
    button=CTkButton(frame1,text=button_text,command=settings)
        button.pack(padx=10,pady=10)

    root.mainloop()

def settings():
    global submit,mode,color,config_color,config_mode,gender
    window=CTkToplevel(root)
    window.title("Settings")
    window.geometry("200x300")
    label1=CTkLabel(window,text="Mode").pack(pady=5)
    mode=CTkOptionMenu(window,values=["light","dark"])
    mode.pack(pady=5,padx=5,anchor=CENTER) 
    label2=CTkLabel(window,text="Color").pack(pady=5)
    
    color=CTkOptionMenu(window,values=["pink","blue","green","dark-blue"])
    color.pack(pady=5)
    label3=CTkLabel(window,text="speech-gender").pack(pady=5)
    gender=CTkOptionMenu(window,values=["male","female"])
    gender.pack(pady=5)
    submit=CTkButton(window,text="Submit",command=change_config)
    submit.pack(pady=20)
    window.mainloop()


   

if __name__=="__main__":
    def restart():
        time.sleep(5)
        root.destroy()
        main()
        
    main()

Я хочу создать блокнот, где мы можем менять темы и цвета. Я создал файл config.ini, в котором я сохраняю текущий режим, цвет и тип голоса для блокнота (тип голоса предназначен для функции преобразования текста в речь, которую я добавил здесь), потому что при использовании customtkinter мы можем установить цветовую тему по умолчанию и не можем измените его после инициализации в программе. Теперь программа сохраняет выбранные настройки в файле config.ini и получает их при повторном запуске. Я хочу, чтобы программа снова запускалась без необходимости явно запускать ее снова.

Хотя программа работает, я все еще получаю эту ошибку на бэкэнде:

      invalid command name "2912423726080check_dpi_scaling"
    while executing
"2912423726080check_dpi_scaling"
    ("after" script)
invalid command name "2912423728512update"
    while executing
"2912423728512update"
    ("after" script)
invalid command name "2912423728448<lambda>"
    while executing
"2912423728448<lambda>"
    ("after" script)

Я хочу знать, что означает эта ошибка, чтобы пользователи не столкнулись с проблемами в будущем при использовании этого приложения. Заранее спасибо за помощь.

0 ответов

Другие вопросы по тегам