Python - 在Tkinter中使用bind函数的问题

时间:2014-02-13 02:16:54

标签: python tkinter

我正在尝试编写一个基本的文本编辑器,当用户使用保存菜单栏时,将调用函数save。我创建一个新框架并输入一个条目供用户输入文件名。我正在为Entry添加一个绑定,所以当用户按下Enter键时,它将调用saveFile,最终将正确保存文件。

问题是它在创建绑定时似乎调用了saveFile函数,但不确定为什么它不等我按Enter键。

我试图找到有关它的文章,但似乎无法找到问题。

def save(self):
    tempWin =  Tk()

    frame = Frame(tempWin, width=100, height=100)
    entry = Entry(frame)
    frame.pack()
    entry.pack()

    entry.bind("<Return>",self.saveFile(entry,tempWin))


def saveFile(self,file,tempWin):
    print("saveFile")

1 个答案:

答案 0 :(得分:2)

是的,这正是发生的事情。当Python评估这一行时:

entry.bind("<Return>",self.saveFile(entry,tempWin))

它看到self.saveFile(entry,tempWin),它将其解释为有效的函数调用。所以,它执行它。

您可以通过在lambda function内“隐藏”对self.saveFile的调用来解决问题:

entry.bind("<Return>", lambda e: self.saveFile(entry,tempWin))

下面是一个简单的脚本来演示:

from tkinter import Tk
root = Tk()
root.bind("<Return>", lambda e: print('hi'))
root.mainloop()

e的目的是捕获触发绑定时发送给函数的click事件。