我正在尝试编写一个基本的文本编辑器,当用户使用保存菜单栏时,将调用函数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")
答案 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事件。