2014-02-13 73 views
0

我想寫一個基本的文本編輯器,當用戶使用保存菜單欄時,函數保存將被調用。我創建一個新的框架,並放入一個條目供用戶輸入文件的名稱。我爲Entry添加一個綁定,所以當用戶按下Enter鍵時,它將調用saveFile,最終將正確保存文件。Python - 在Tkinter中使用綁定函數的問題

問題是,它似乎是在我創建綁定時調用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") 

回答

2

是的,那就是到底發生了什麼。當Python評估這一行:

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

它看到self.saveFile(entry,tempWin),它解釋爲一個有效的函數調用。所以,它執行它。

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的目的是捕捉

您可以通過「隱藏」的號召,self.saveFile一個lambda function內解決問題觸發綁定時發送給該函數的單擊事件。

+0

謝謝!這解決了這個問題,我只是想知道未來的參考,如果我可以適應不同的方法綁定到沒有這個問題?或者是我做得很好的方式? – user2469515

+0

@ user2469515 - 呃,不是我所知道的。你做這件事的方式是正確的。此外,使用上面顯示的lambda是對您遇到的問題的乾淨和非常常見的解決方案。事實上,它被用在IDLE解釋器的Python源代碼中。 – iCodez