2017-04-24 82 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) 
相关问题