更改变量时 Tkinter Checkbutton 不更新
Tkinter Checkbutton not updating when changing variable
我有一个 tkinter GUI,我正在我的 Macbook 上使用 Python 3.8。我遇到了一个问题,即更改与复选按钮关联的变量不会改变复选按钮本身的外观。如果我将与其关联的 IntVar() 设置为 1,我希望复选按钮显示为已选中,从我读过的所有内容来看,这应该会发生。
下面是一些显示问题的极其简化的代码:
import tkinter as tk
class Window():
def __init__(self, master):
var = tk.IntVar()
checkbutton = tk.Checkbutton(master, variable=var)
checkbutton.pack()
var.set(1)
root = tk.Tk()
Window(root)
root.mainloop()
当我 运行 脚本时,复选按钮未被选中。不过,我仍然可以通过单击来检查复选按钮。这是一个已知错误还是我遗漏了什么?
已解决:正如 jasonharper 指出的那样,问题是垃圾收集。 tkinter 变量没有被用于任何事情,只是作为一个局部变量存储,所以它被扔掉了,不能被复选按钮引用。将 IntVar 保存在某个固定的地方解决了这个问题。一种解决方案是将变量保存在复选按钮本身的 var 属性中:
import tkinter as tk
class Window():
def __init__(self, master):
var = tk.IntVar()
checkbutton = tk.Checkbutton(master, variable=var)
checkbutton.pack()
var.set(1)
checkbutton.var = var
root = tk.Tk()
Window(root)
root.mainloop()
我有一个 tkinter GUI,我正在我的 Macbook 上使用 Python 3.8。我遇到了一个问题,即更改与复选按钮关联的变量不会改变复选按钮本身的外观。如果我将与其关联的 IntVar() 设置为 1,我希望复选按钮显示为已选中,从我读过的所有内容来看,这应该会发生。
下面是一些显示问题的极其简化的代码:
import tkinter as tk
class Window():
def __init__(self, master):
var = tk.IntVar()
checkbutton = tk.Checkbutton(master, variable=var)
checkbutton.pack()
var.set(1)
root = tk.Tk()
Window(root)
root.mainloop()
当我 运行 脚本时,复选按钮未被选中。不过,我仍然可以通过单击来检查复选按钮。这是一个已知错误还是我遗漏了什么?
已解决:正如 jasonharper 指出的那样,问题是垃圾收集。 tkinter 变量没有被用于任何事情,只是作为一个局部变量存储,所以它被扔掉了,不能被复选按钮引用。将 IntVar 保存在某个固定的地方解决了这个问题。一种解决方案是将变量保存在复选按钮本身的 var 属性中:
import tkinter as tk
class Window():
def __init__(self, master):
var = tk.IntVar()
checkbutton = tk.Checkbutton(master, variable=var)
checkbutton.pack()
var.set(1)
checkbutton.var = var
root = tk.Tk()
Window(root)
root.mainloop()