将 ttk checkbutton IntVar 设置为 0,但 ttk checkbutton 不会取消选择。 .?

Setting ttk checkbutton IntVar to 0, but ttk checkbutton does not deselect. .?

正是问题所说的,我不知道为什么。基本上我的意图是将所有复选框初始化为未选中状态。这是我的代码:

import tkinter as tk
from tkinter import ttk

class Checkbuttons():
    def __init__(self,parent,list_of_values,column,row,**kwargs):
        #Converts list into dictionary
        self.values = {}
        for value in list_of_values:
            self.values[value] = tk.IntVar()
        column_counter = column
        row_counter = row
        for tag in list(self.values):
            print('{} : {}'.format(tag,self.values[tag].get())) #Test reveals IntVar is 0
            Checkbutton(parent,tag,self.values[tag],column_counter,row_counter,width=15)
            print('{} : {}'.format(tag,self.values[tag].get())) #Test reveals IntVar is 0
            self.values[tag].set(0)
            row_counter += 1

class Checkbutton(ttk.Checkbutton):
    def __init__(self,parent,text,variable,column,row,search=True,**kwargs):
        kwargs['text'] = text
        kwargs['variable'] = variable
        super().__init__(parent,**kwargs)
        print(variable.get()) #IntVar is also zero here.
        self.grid(column=column,row=row)

root = tk.Tk()
my_list = {'e-book epub','e-book PDF','Paperback','Hardcover','Audiobook MP3','Audible','Kindle'}
Checkbuttons(root,my_list,1,1)
root.mainloop()

非常感谢任何帮助,请不要批评我代码的其他方面,除非它是相关的。

问题是由以下行引起的:

Checkbuttons(root,my_list,1,1)

由于没有变量引用 Checkbuttons() 的实例,它将被垃圾回收(它的实例变量 self.values 也是如此)。

您需要使用变量来保存实例:

a = Checkbuttons(root,my_list,1,1)