【问题标题】:Tkinter Checkbutton not updating when changing variable更改变量时,Tkinter Checkbutton 不更新
【发布时间】:2020-05-04 21:59:47
【问题描述】:

我有一个 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()

当我运行脚本时,检查按钮未被选中。我仍然可以通过单击它来检查复选按钮。这是一个已知的错误还是我遗漏了什么?

【问题讨论】:

  • 您必须将 Var 存储在与小部件一样长的地方。作为一个局部变量,它会立即被垃圾回收,使得 Checkbutton 无处可存储其状态。
  • 谢谢!将 Var 存储为 checkbutton 本身的一个属性是有效的! checkbutton.var = var

标签: python tkinter garbage-collection python-3.8


【解决方案1】:

已解决:正如 jasonharper 指出的那样,问题是垃圾收集。 tkinter 变量没有被用于任何事情,只是被存储为局部变量,所以它被抛出并且不能被 checkbutton 引用。将 IntVar 保存在卡住的地方可以解决问题。一种解决方案是将变量保存在 checkbutton 本身的 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()

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2018-10-26
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多