检索Tkinter Checkbutton状态:TclError:无法读取“PY_VAR”:没有这样的变量

2024-06-23 03:00:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个基本的python2.7gui应用程序中使用Tkinter,我想通过使用IntVar来检索Checkbutton小部件状态(选中/未选中),但是我得到以下错误。在

TclError: can't read "PY_VAR": no such variable

我遵循了effbot about the Checkbutton Widget上的示例,并为每个按钮使用不同的IntVar,并使用callback函数通过调用按钮上的getvar函数来打印变量。在

我的唯一目标是查看Checkbutton小部件的状态。在

我正在使用Tkinter Grid Geometry管理器将小部件放在GUI上。下面是一个产生错误的MCVE示例。在

^{pr2}$

代码生成四个带编号的按钮,将数字传递给lambda函数,该函数在dict中查找按钮并调用其相应的getvar函数。在

如果您运行示例代码,当您选中四个按钮中的任何一个时,它将生成以下错误。它在一个名为tktest.py的文件中

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1540, in __call__
    return self.func(*args)
  File "./tktest.py", line 20, in <lambda>
    command=lambda bn=n: self.printvar(bn)
  File "./tktest.py", line 12, in printvar
    print self.buttons[button_number].getvar()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 513, in getvar
    return self.tk.getvar(name)
TclError: can't read "PY_VAR": no such variable

每个按钮没有var变量,因此我调用getvar方法。在

检查每个单独的Checkbutton小部件状态的任何替代方法都是可以接受的。在


Tags: 函数inpyself示例部件tkinter状态
1条回答
网友
1楼 · 发布于 2024-06-23 03:00:00

编辑:首先为每个按钮创建n个可用的变量,然后保存在一个列表中。在

def createWidgets(self,master):
    self.vars=[]
    for n in range(0,4):
        var = tk.IntVar()
        self.vars.append(var)

    for n in range(0,4):
        button = tk.Checkbutton(
            master,
            variable=self.vars[n],
            command=lambda bn=n: self.printvar(bn)
        )
        button.grid(row=0, column=n)
        self.buttons[n] = button

然后你可以把你的方法改成这个来调用这个数的变量

^{pr2}$

例如,输出是:

The button:2 is 0
The button:2 is 1

当0被取消选中,1被选中时

相关问题 更多 >

    热门问题