Функция ведет себя по-разному при вызове с кнопки tk по сравнению с прямым вызовом

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

У меня действительно странная проблема, у меня есть это «окно продукта» в моей программе tkinter, оно должно открываться, когда я нажимаю кнопку, но когда я открываю его таким образом, флажки не работают должным образом

 btn_mngProd=tk.Button(frm_left, text='Manage Products', font=("Tahoma",14),width=16,height=1, command=openProductsWindow)
btn_mngProd.pack(side='bottom',padx=10,pady=5,)
  

однако, если я вызову функцию, просто поместив это в «основную область» кода:
openProductsWindow()
это работает правильно

функция «openProductsWindow» довольно большая, поэтому я не буду приводить здесь все, но самое главное, что внутри функции есть вызов renderTable(1) , а внутри функции с возможностью визуализации есть вызов updateTable(page) , который является функцией, которая генерирует флажки, я уверенсохранение всех BooleanVar для каждой контрольной кнопки в списке, но проблема возникает, когда я пытаюсь прочитать значение каждого из 20 переменных

 def updateTable(page):
    #some code here
    global checkboxesVars
    checkboxesVars.clear()   
    rowCount=1
    for j in range((page-1)*20,page*20):
        
        #some code here

        checkboxesVars.append(tk.BooleanVar())
        cbx_prod=tk.Checkbutton(master=frm_table,bg="white",onvalue=True, offvalue=False, variable=checkboxesVars[rowCount-1], command=checkCheckboxes)
        cbx_prod.grid(row=rowCount, column=3,sticky='nesw',padx=1,pady=1)
        if(prodNumber > dataLenght):
            cbx_prod.configure(state='disabled')
        rowCount =1  
  

это функция, которая проверяет, сколько флажков нажато:

     global checkboxesVars
    checkeds=0
    for i in range(len(checkboxesVars)):
        print(i)
        cb_var=checkboxesVars[i]
        print(cb_var.get())
        if(cb_var.get()):
            checkeds =1
  

у меня есть оба отпечатка, чтобы помочь мне отлаживать, это то, что должно печататься, когда я проверяю первые 3 поля:

 0
True
1
True
2
True
3
False
4
False...
  

и это именно то, что я получаю, когда выполняю openProductsWindow() напрямую, но если я выполняю его нажатием кнопки, все 20 переменных флажков отображаются как False, даже если я проверяю их все

извините за любые ошибки в английском, я не являюсь носителем языка

Комментарии:

1. Используете ли вы Tk() как для корневого окна, так и для окна продукта ?

2. да, я использую, есть ли лучший способ сделать это? возможно, всплывающее окно

3. я провел некоторое исследование и наткнулся на tk.Toplevel() , я протестировал его, и он отлично работает, спасибо, но кто-нибудь может объяснить мне, в чем именно может быть проблема?

4. Это связано с тем, что эти BooleanVars и checkbuttons находятся в разных Tk() экземплярах и не могут быть связаны друг с другом.