2011-10-10 86 views
0

只是想知道,如何綁定輸入字段(與返回鍵)一個函數,需要2個參數計數事件作爲其中之一而不拉姆達或類,只是一個功能和2個參數:如何發送多個參數綁定到python的一個函數2.7.2

def function(event,entry):#entry is the widget to be focused. also, entry is just a place holder NOT A WIDGET. entry MUST be specified. it cannot be removed. 
    entry.focus() 

entry1.bind("<Return>",function(None,entry2)) 

當取值範被綁定,它綁定當它被綁定到執行權和功能則忽略所有的其它輸入。它可以讓我把字符放到字段中,但是當我打回時,它沒有通過並且關注第二個條目。如果我刪除None作爲參數之一,它會給我一個只定義了兩個必需參數中的一個的錯誤,那麼我放入None的位置並不重要,它仍然不起作用。我如何讓它在沒有類或匿名函數的情況下工作?

回答

3

當你寫function(None,entry2)你/是/調用它的時候了 - 該功能可能會返回None,所以基本上你在做什麼是:

function(None, entry2) 
entry1.bind("<Return>", None) 

你是什麼可能尋找的是:

entry1.bind("<Return>", lambda e: function(entry2)) 

這會產生一個功能(注:生成的功能,但不會稱呼它),它有一個參數(事件,「E」),並忽略它

當你然後點擊回車鍵,這樣生成的函數將被調用,反過來它會調用function(entry2)

+0

謝謝!這工作,我不得不刪除事件作爲論據之一!謝謝sooooo多! –

+0

你是否知道如何將參數傳遞給像上面這樣的函數,除了使用Python Mega-Widget Scrolled Listbox(而不是綁定,但是通過使用內置的dblclickcommand = function(1)?因爲現在只需調用函數馬上,它不工作。 –

-1

沒有一個完整的例子,很難提供一個完整的答案。但是有一個很容易修復的常見錯誤:綁定的第二個參數應該是函數名稱,而不是函數調用。

如果更改綁定聲明:

entry1.bind("<Return>", function) 

時被觸發,而不是當你執行綁定語句返回事件的函數將被調用。

+0

如果什麼功能需要2個參數,包括事件作爲其中之一嗎? –

+0

lambda是正確的答案,但你排除了問題陳述中的lambdas和類。如果由於某種原因你絕對討厭lambda,那麼只需要事件arg調用一個虛擬函數,然後事件arg就會調用實際的函數。 – Dave

相關問題