tkinter:为什么默认情况下我的复选框没有被选中?

tkinter: Why aren't my checkboxes checked by default?

我有使用户能够编辑对象的功能,其中一部分是创建新的 window,其中每个变量的复选框中都有条目,默认情况下应该具有之前输入的变量值,但是我无法将我的复选框设置为默认选中。

现在我正在尝试默认选中所有复选框(我认为如果这会起作用,很少有 if 语句不会更改它,我将有适当的解决方案来解决我的问题)。

这是我与这些复选框相关的代码片段:

from tkinter import *


def editonclick():
    persons = ['User 1', 'User 2', 'User 3']
    person_labels = []
    person_checkboxes = []
    checkbox_var = []

    new_window = Toplevel()

    for person in persons:
        checkbox_var.append(IntVar(value=1))
        person_labels.append(Label(new_window, text=person))
        person_checkboxes.append(Checkbutton(new_window, variable=checkbox_var[-1]))

    for i in range(len(persons)):
        person_labels[i].grid(row=i, column=0)
        person_checkboxes[i].grid(row=i, column=1)


root = Tk()

editonclick()

mainloop()

我尝试将默认设置 checkbox_var 设置为 IntVar(value=1) 在将其附加到列表并在创建它后选择复选框后将其值设置为 1 并且 none 它有效,但是当我还像这样打印 checkbox_var 的状态:

尝试:

from tkinter import *


def editonclick():
    persons = ['User 1', 'User 2', 'User 3']
    person_labels = []
    person_checkboxes = []
    checkbox_var = []

    new_window = Toplevel()

    for person in persons:
        checkbox_var.append(IntVar(value=1))
        person_labels.append(Label(new_window, text=person))
        print(checkbox_var[-1].get())
        person_checkboxes.append(Checkbutton(new_window, variable=checkbox_var[-1]))
        print(checkbox_var[-1].get())

    for i in range(len(persons)):
        person_labels[i].grid(row=i, column=0)
        person_checkboxes[i].grid(row=i, column=1)


root = Tk()

editonclick()

mainloop()

即使输出是:

1
1

None 个复选框已选中。

所以问题是我可以做些什么来默认选中这些复选框?

编辑: 我认为上面的代码是解决我的问题的 MRE,在编写它时我意识到当函数代码之外的代码工作正常时。

也试过添加 onvalue=1offvalue=0,但还是不行。

问题是您的 IntVar 实例是局部变量。当它们超出范围时,它们就失去了价值。

一个简单的解决方法是在 editionclick.

中添加 global checkbox_var

问题是 checkbox_var 是一个局部变量,它正在收集 carbage。

你可以试试:

self.checkbox_var = []
person_checkboxes.append(Checkbutton(new_window, variable=self.checkbox_var[-1]))