python - "SyntaxError: non-keyword arg after keyword arg"尝试将函数绑定(bind)到 tkinter 中的按钮时

标签 python lambda tkinter

当我运行以下代码行时,我试图将按钮按下绑定(bind)到 Tkinter 中的函数

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

我收到以下错误

语法错误:关键字参数后非关键字参数

我是否遗漏了一些东西,我应该以不同的方式绑定(bind)该函数吗?

编辑: 下面的堆栈跟踪

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

最佳答案

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

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

然后调用该函数

foo(1, 2, 3)

没问题

foo(1, 2, third=3) 

还可以,但是

foo(1, second=2, 3)

不行。

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

要弄清楚为什么您的代码违反了此语法要求,我建议分解该代码行,以便您可以确定是否是对 ChangeColorpack 的调用> 或导致问题的 Button。为了使代码更易于调试,请将每个函数调用放在自己的行上:

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

关于python - "SyntaxError: non-keyword arg after keyword arg"尝试将函数绑定(bind)到 tkinter 中的按钮时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43578106/

相关文章:

Python正则表达式处理 "?"

python - 如果使用Apache Slider时无法在群集上安装Python,该怎么办?

python - 根据其他列的条件在 Pandas 中创建一个新列

python - tkinter:应用程序终止后事件绑定(bind)仍然存在吗?

python - Tkinter OptionMenu DisplayOptions 和分配值

Python + Facebook,轻松获取群组信息

python - 获取 ttk.Frame 的默认背景

PYTHON:如何使用 tkinter 将两个标签锚定到顶部

c# - 从 MemberExpression 和 Constant 创建 Func<T, bool>

c# - VB 中的 Linq.Expression GetValue?