Некорректная работа с tkinter.IntVar во вложенных функциях

Создаю небольшое GUI на tkinter в определённый момент надо создать массив tkinter.Сheckbutton и привязать их к массиву IntVar соответственно, привязка работает, но когда возникает необходимость считать их значения то метод .get() возвращает только 0.

Вот короткий скрипт работающий с аналогичными массивами:

import tkinter

W = tkinter.Tk() 

Inteeger = [] # массив с IntVar
for i in range(3):
    Inteeger.append(tkinter.IntVar())

ch = [] # массив с Checkbutton
for i in range(3):
    check = tkinter.Checkbutton(W,textvariable = Inteeger[i] ,variable = Inteeger[i])
    ch.append(check)
    ch[-1].grid(row = i, column = 0)

def click():    # считает количество отмеченных флажков и выводит в консоль
    sum = 0
    for i in Inteeger:
            sum += i.get()
    print(sum)

btn = tkinter.Button(W, text = 'почему?', comman = click)
btn.grid(row = 3, column = 2)

W.mainloop()

Он работает корректно. Но стоит вызвать окно с таким содержанием из другого окна, и метод .get() возвращает только 0. Вот пример кода:

import tkinter

def def1():
    W = tkinter.Tk() 

    Inteeger = [] # массив с IntVar
    for i in range(3):
        Inteeger.append(tkinter.IntVar())

    ch = [] # массив с Checkbutton
    for i in range(3):
        check = tkinter.Checkbutton(W,textvariable = Inteeger[i] ,variable = Inteeger[i])
        ch.append(check)
        ch[-1].grid(row = i, column = 0)

    def click():    # считает количество отмеченных флажков и выводит в консоль
        sum = 0
        for i in Inteeger:
                sum += i.get()
        print(sum)

    btn = tkinter.Button(W, text = 'кнопка', comman = click)
    btn.grid(row = 3, column = 2)

    W.mainloop()

Window = tkinter.Tk()
btn = tkinter.Button(Window, text = 'кнопка', comman = def1)
btn.grid(row = 3, column = 2)

Window.mainloop()

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

Автор решения: S. Nick

Попробуйте так:

from tkinter import Tk, Toplevel, Button, Label, IntVar, Checkbutton


def def1():
#    W = tkinter.Tk() 
    top = Toplevel(root)                                                            # +++

    Inteeger = [] # массив с IntVar
    for i in range(3):
        Inteeger.append(IntVar())

    ch = [] # массив с Checkbutton
    for i in range(3):
        check = Checkbutton(top,textvariable = Inteeger[i] ,variable = Inteeger[i])  # top
        ch.append(check)
        ch[-1].grid(row = i, column = 0)

    def click():    # считает количество отмеченных флажков и выводит в консоль
        sum = 0
        for i in Inteeger:
                sum += i.get()
        print(sum)

    btn = Button(top, text = 'кнопка', comman = click)                                # top
    btn.grid(row = 3, column = 2)
#    W.mainloop()
    

root = Tk()
label = Label(root, text='Hello World')
label.pack()
btn = Button(root, text = 'openModal', comman=def1).pack()
root.mainloop()

введите сюда описание изображения

→ Ссылка