как получить значение checkbox при повторном открытии дочернего окна в tkinter?

Нужно открыть новое окно поставить галку , закрыть окно , потом заново открыть и что бы галка стояла.Не пойму почему метод .set() значение устанавливает но toplevel при повторном открытии его не видит

import tkinter as tk
from tkinter import ttk
def click():# функция при нажатии на кнопку открывает новое окно и чекбокс
    def keep_checkbox(): # функция установки з-чия intvar
        if chk_var.get() == 0:
            pass
        else:
            chk_var.set(1)
        top_window.destroy()
    top_window = tk.Toplevel()
    chk_var = tk.IntVar()
    chk = ttk.Checkbutton(top_window, variable=chk_var).pack()
    top_window.protocol('WM_DELETE_WINDOW', keep_checkbox)
    top_window.mainloop()
root = tk.Tk()
frm = ttk.Frame(root).pack()
btn = ttk.Button(frm, text='Новое окно', command=click).pack()
root.mainloop()

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

Автор решения: Вадим Мотеюнас

решил задачу таким образом: сделал intvar переменную глобальной, и передал ее в качестве аргумента в функцию click() через лямбда-функцию:

import tkinter as tk
from tkinter import ttk
def click(_intvar):# функция при нажатии на кнопку открывает новое окно и чекбокс
    top_window = tk.Toplevel()
    chk = ttk.Checkbutton(top_window, variable=_intvar).pack()
    top_window.mainloop()

root = tk.Tk()
chk_var = tk.IntVar()
frm = ttk.Frame(root).pack()
btn = ttk.Button(frm, text='Новое окно', command=lambda: click(chk_var)).pack()
root.mainloop()
→ Ссылка