我试图将一个函数绑定到Tkinter中的多个Entry小部件。我在for循环中使用许多Entry小部件填充了我的框架。要将函数绑定到使用for循环创建的Entry小部件,我想我可以执行以下操作:
import Tkinter as tk
class Application(tk.Frame):
def __init__(self, master):
self.master = master
tk.Frame.__init__(self, master, width=200, height=200)
self.master.title('Application')
self.pack_propagate(0)
self.pack()
for i in range(10):
strVar = tk.StringVar()
item = tk.Entry(self, textvariable=strVar)
item.bind(sequence='<Return>', func=lambda strVar=strVar, i=i: self.obtain(i, strVar))
item.grid(row=i, sticky=tk.W)
def obtain(self, i, strVar):
print i
print strVar.get()
def run(self):
self.mainloop()
app = Application(tk.Tk())
app.run()
但我收到以下错误:
print strVar.get()
AttributeError: Event instance has no attribute 'get'
我不明白为什么它不能将strVar解释为tk.StringVar()变量......有什么想法吗?
答案 0 :(得分:3)
将事件作为回调的第一个参数传递。由于回调的第一个参数是strVar
,因此Event对象将在该变量中传递。您应该在参数列表的前面添加一个additionl参数来保存事件,例如lambda event, strVar=strVar, i=i: self.obtain(i, strVar)
。