2017-04-24 70 views
1

我想一次按鍵綁定到Tkinter的一個功能,當我運行下面的代碼行的時候「語法錯誤:後關鍵字ARG非關鍵字ARG」試圖將一個函數綁定到一個按鈕的Tkinter

get = Button(root, lambda: ChangeColour(boxes[1][2], boxes[5][2], 
      main)).pack(fill = BOTH) 

我收到以下錯誤

語法錯誤:關鍵字ARG

我缺少的東西后,非關鍵字ARG,我應該結合不同的功能?

編輯: 堆棧跟蹤下面

File "C:/Users/07725172499/Documents/a.py", line 151 
    relief=RIDGE, lambda: ChangeColour(boxes[1][2], boxes[5][2], main)).pack(fill = BOTH) 
           ^
SyntaxError: non-keyword arg after keyword arg 

過程結束,退出代碼1

+2

我沒有看到一個問題。你能發佈完整的堆棧跟蹤嗎? – tdelaney

+0

什麼是完整堆棧跟蹤,我如何得到它 –

+0

當你得到'SyntaxError:關鍵字arg'後面的非關鍵字arg時,它是否在顯示正在評估哪些行的文本簇內?這就是我們需要的。 – tdelaney

回答

1

SyntaxError: non-keyword arg after keyword arg時打破這種參數可以在位置順序和關鍵字的混合物給出了Python要求會出現錯誤=值對,但是一旦提供了關鍵字,就不能在該函數調用中使用位置順序。例如,如果一個函數的定義開始

def foo(first, second, third): 

然後調用與

foo(1, 2, 3) 

是確定的功能和

foo(1, 2, third=3) 

是確定的,但

foo(1, second=2, 3) 

不好。

從你的回溯看來,你提供了一個按關鍵字relief參數的值,所以你需要提供函數按關鍵字綁定。使用command=lamda:作爲參數。但是,我懷疑您致電ChangeColor返回的值不是函數,因此與Button的命令參數的預期類型不匹配。

弄清楚爲什麼你的代碼是打破這個語法要求,我建議分手的代碼行,這樣就可以辨別它是否是調用ChangeColorpackButton所導致的問題。爲了使您的代碼更易於調試,把每個函數調用它自己的路線:

bound_function = ChangeColour(boxes[1][2], boxes[5][2], main) 
my_button = Button(root, bound_function) 
get = my_button.pack(fill=BOTH) 
相關問題