繁体   English   中英

将lambda函数绑定到使用For循环创建的多个Tkinter Entry小部件

[英]Binding a lambda function to multiple Tkinter Entry widgets created with For loop

我试图将一个函数绑定到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()变量...有什么想法吗?

该事件将作为第一个参数传递给您的回调。 由于回调的第一个参数是strVar ,因此将在该变量中传递Event对象。 您应该在参数列表的lambda event, strVar=strVar, i=i: self.obtain(i, strVar)添加一个additional参数来保存事件,例如, lambda event, strVar=strVar, i=i: self.obtain(i, strVar)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM