" SyntaxError:关键字arg&#34之后的非关键字arg;尝试将函数绑定到tkinter中的按钮时

时间:2017-04-24 00:40:46

标签: python lambda tkinter

当我运行以下代码行时,我正试图将按钮按下到Tkinter中的某个功能

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

我收到以下错误

SyntaxError:关键字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完成处理

1 个答案:

答案 0 :(得分:1)

当您破坏Python要求时,会发生错误SyntaxError: non-keyword arg after keyword arg,可以在位置顺序和关键字=值对的混合中给出参数但是一旦提供了关键字,您不能随后在该函数调用中使用位置顺序。例如,如果函数定义以

开头
def foo(first, second, third):

然后用

调用该函数
foo(1, 2, 3)

没问题,

foo(1, 2, third=3) 

没问题,但是

foo(1, second=2, 3)

不行。

从您的回溯中,您似乎通过关键字为relief参数提供了值,因此您需要提供按关键字绑定的功能。使用command=lamda:作为参数。但是,我怀疑您对ChangeColor的调用返回的值不是函数,因此与Button的命令参数的预期类型不匹配。

要弄清楚您的代码违反此语法要求的原因,我建议您分解代码行,以便确定是调用ChangeColorpack还是{{1}这导致了问题。为了使代码更容易调试,请将每个函数调用放在自己的行上:

Button