Python, 如何防止tkinter变量被垃圾回收?

0 投票
1 回答
35 浏览
提问于 2025-04-14 15:39

我有一个函数,它会创建一个tkinter窗口,里面有很多复选框(checkbutton)。后来,另一个窗口上的一个按钮会保存这些复选框的状态。这个保存状态的函数会接收一个窗口的引用,通过这个窗口(用 .winfo_children())来获取每个复选框的引用。

尽管窗口上的所有复选框都是一样创建、设置和获取的,但每次运行代码时,不同的复选框会报错:_tkinter.TclError: can't read "PY_VAR0": no such variable

这让我觉得我的一些 BooleanVar() tkinter 变量在我还需要它们的时候就被垃圾回收了。我该如何防止我的tkinter变量被垃圾回收呢?


这和这个问题类似,但我更希望能找到一个解决方案,能从一开始就防止垃圾回收,因为改变我函数的结构会很困难。

1 个回答

2

就像任何Python对象一样,你需要保持对它们的永久引用。也就是说,你要么把它们保存为某个对象的属性,要么把它们设为全局变量。

如果你创建了多个实例,并且在一个主窗口中创建了一个变量,但想在另一个窗口中使用它,你可能也会遇到问题。

撰写回答