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

标签 python tkinter widget tkinter-entry

我正在尝试将一个函数绑定(bind)到 Tkinter 中的多个 Entry 小部件。我在 for 循环中用许多 Entry 小部件填充了我的框架。要将函数绑定(bind)到使用 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)

关于python - 将 lambda 函数绑定(bind)到使用 For 循环创建的多个 Tkinter Entry 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22388337/

相关文章:

python - Python 字典的内存高效替代方案

Python 解析 XML 文件中的某些行并将该行输出到文本小部件

python - 将 no-X11 tkinter 与 python 一起使用(通过 macports 安装)

android - 如何在我的项目中处理 android widget 中的 AppWidgetProvider?

JavaScript 和 Soundcloud 小部件 : How to load new track into SC Widget iFrame (via URL)

android - 以编程方式更改小部件的渐变背景

python - 在我的 Django Digital Ocean 服务器上的什么位置设置环境变量?

python - 想要通过 python 中的 beautifulsoup 使用 post 方法(不想使用 selenium)来抓取具有 loadmore 按钮的整个网页

python - 我们如何在 scipy.stats.anderson_ksamp 中传递两个数据集?任何人都可以举例说明吗?

python - 如何使用 Python/Tkinter 进行菜单栏剪切/复制/粘贴