2015-10-30 46 views
2

所以,我有我寫了這個非常簡單的事情,它的殺了我試圖找出爲什麼它不會工作。它所做的只是點擊時打印聲明。類型錯誤:printName1()有0位置參數,但1給出

所以對於第一個例子,我有一個按鈕,直接分配功能printName1到它,這工作完全正常。

那麼接下來的事情就是使用.bind()功能綁定。所以在這種情況下,我們只有一個框架,可以根據您按下哪個按鈕來打印某些內容。但不幸的是,每當我使用綁定,它會拋出上面的錯誤顯示。參考tkinter\__init__.py的錯誤,所以它不是直接在我的代碼中,但也許它需要以不同的方式完成?多謝你們。

from tkinter import * 

root = Tk() 

def printName1(): 
    print('Jack') 

def printName2(): 
    print('John') 

def printName3(): 
    print('Jill') 

frame = Frame(root, width=300, height=250) 
frame.bind("<Button-1>", printName1) 
frame.bind("<Button-2>", printName2) 
frame.bind("<Button-3>", printName3) 
frame.pack() 

root.mainloop() 

編輯:該錯誤是令人困惑,因爲它使人們似乎有一個額外的參數時,應該有0但實際上我需要一個參數添加到的功能,那就是事件。所以它應該是def printName1(event)等等。只是想,我會讓你們知道什麼對我有用,以防有人絆倒在這。

回答

4

如果您參考documentation regarding tkinter events and bindings,您會看到當觸發事件時,關聯的事件對象將作爲第一個(也是唯一)參數傳遞給有界函數(在您的案例中爲printName1和朋友)。

所以,你需要做的是修改這些printName*函數接受事件的說法。

def printName1(event): 
    print('Jack') 

你希望達到應該工作那是什麼。

當然,你可以使event參數可選的,因爲@ TigerhawkT3建議。

1

活動,如鍵盤/鼠標,都發送到應用程序與有關事件的信息:其關鍵是它,在那裏有鼠標,當你點擊時,諸如此類的事情。這意味着任何綁定到這樣的事件的回調都需要參數。如果您還想將其綁定到不需要事件的Tkinter Button,則也可以處理該事件。只需使用默認參數定義您的功能:

def printName1(event=None): 
    ... 
+0

不僅僅是鍵盤和鼠標事件,而是所有事件。 –

+0

我沒有想到其他輸入設備,如遊戲杆。我想這是除了'Button'激活之外的任何用戶輸入? – TigerhawkT3

+0

有一些虛擬事件,例如''ListboxSelect >>',以及像'',''等低級事件。 –

相關問題