Tkinter: список флажков не отвечает

1

Я пытаюсь создать список флажков с циклом. Я изменил реализацию кода другого, который использует ту же концепцию и должен иметь ту же функцию, что и я. Когда я пытаюсь распечатать состояние каждого флажка, ни один из них не обновляется до 1. Они все остаются на 0, даже если я нажимаю на них. Вот мой код, функция test() не ведет себя так, как я ожидаю. Спасибо, за помощь

import tkinter
import tkinter.filedialog
import os

# --- functions ---

def browse():

    filez = tkinter.filedialog.askdirectory(parent=window, title='Choose a file')

    ent1.insert(20, filez)

    dirs = os.listdir(filez)

    # remove previous IntVars
    intvar_dict.clear()

    # remove previous Checkboxes
    for cb in checkbutton_list:
        cb.destroy()
    checkbutton_list.clear() 


    for filename in dirs:
        # create IntVar for filename and keep in dictionary
        var = tkinter.IntVar()

        # create Checkbutton for filename and keep on list
        c = tkinter.Checkbutton(window, text=filename, variable=var)
        c.pack()
        intvar_dict[filename] = var
        checkbutton_list.append(c)

def test():


    for key, value in intvar_dict.items():


        if value.get() > 0:
            print("HIIIIII")
        print('selected:', key)
        #print (value.get())

# --- main ---

# to keep all IntVars for all filenames
intvar_dict = {}
 # to keep all Checkbuttons for all filenames
checkbutton_list = []

window = tkinter.Tk()

lbl = tkinter.Label(window, text="Path")
lbl.pack()

ent1 = tkinter.Entry(window)
ent1.pack()

btn1 = tkinter.Button(window, text="Select Path", command=browse)
btn1.pack()

btn1 = tkinter.Button(window, text="Test Checkboxes", command=test)
btn1.pack()

window.mainloop()
Теги:
tkinter
checkbox
checkboxlist

1 ответ

0

Этот код работает отлично, если он выполняется напрямую, однако проблема, описанная в вопросе, возникает, если код запускается из QtConsole. Эту проблему можно устранить, указав мастер IntVar: var = tkinter.IntVar(master=window).

Действительно, QtConsole автоматически создает экземпляр Tk, поэтому при создании window есть два экземпляра Tk. Затем, когда IntVar, tkinter связывает его с первым экземпляром Tk, то есть не с мастером Checkbutton. Поскольку Checkbutton и IntVar не принадлежат к одному экземпляру Tk (т. Checkbutton IntVar интерпретаторам Tcl), они не могут общаться. Вот почему значение переменной не соответствует состоянию флажка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню