Вторичное окно tkinter отказываеться закрываться
Я столкнулся с проблемой: при открытии вторичного окна по нажатию кнопки оно должно создавать папку на диске с и закрываться но после создания папки оно не закрываеться, у меня Python 3.8 работаю в Python Idle
вот часть кода:
def setup():
setup = Toplevel()
setup.geometry("300x300")
setup.title("setup")
setup["bg"] = "white"
setup.resizable(width=False, height=False)
setup.iconbitmap('setup.ico')
b = tk.Button(setup, text='setup', command= lambda: startsetup())
b.place(x=260, y=274)
def startsetup():
os.mkdir("c://TEST")
setup.destroy()
Ответы (1 шт):
Переменная setup в функции setup - локальная (кстати, называть разные вещи одинаковыми именами - это отличный способ запутать самого себя, поэтому лучше так не делать). Функция startsetup эту переменную не видит, а видит только функцию setup под этим именем (при запуске кода из консоли после нажатия на кнопку у вас пишет что у функции setup нет метода destroy).
Один из вариантов решения - расположить функцию startsetup внутри функции setup, тогда функция startsetup будет видеть локальные переменные внешней функции:
def setup():
setup = Toplevel()
setup.geometry("300x300")
setup.title("setup")
setup["bg"] = "white"
setup.resizable(width=False, height=False)
setup.iconbitmap('setup.ico')
def startsetup():
os.mkdir("c:/TEST") # Прямые слеши не нужно экранировать - только обратные
setup.destroy()
b = tk.Button(setup, text='setup', command=startsetup) # вместо лямбды без параметров можно передавать саму функцию
b.place(x=260, y=274)