【发布时间】:2017-02-17 11:54:24
【问题描述】:
我在基本的 Python 2.7 GUI 应用程序中使用 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 示例。
#!/usr/bin/env python
import Tkinter as tk
class Frame(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.buttons = dict() #number to button widget
self.createWidgets(master)
def printvar(self, button_number):
print self.buttons[button_number].getvar()
def createWidgets(self,master):
for n in range(0,4):
var = tk.IntVar()
button = tk.Checkbutton(
master,
variable=var,
command=lambda bn=n: self.printvar(bn)
)
button.grid(row=0, column=n)
self.buttons[n] = button
window = Frame(tk.Tk())
window.mainloop()
代码生成四个编号按钮,将数字传递给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 小部件状态的任何替代方法也是可以接受的。
【问题讨论】:
标签: python python-2.7 user-interface tkinter