在"命令"上调用带参数的函数和"绑定"

时间:2012-02-22 13:56:37

标签: python tkinter

我想指出,我从短时间开始学习python。 问题是初学者问题。

我需要在程序顶部的菜单中添加命令,这将调用函数“color_picker(”red“)。

kolory.add_command(label="Czerwony", command=color_picker('red')) 当我使用它时,它有点不对,因为一旦程序启动就调用它,它不等我单击菜单按钮。 (我很确定,因为我在该函数中添加了“showinfo”,它在我做任何事之前显示了消息) kolory.add_command(label="Czerwony", command=lambda: color_picker('red'))那种方法有用,但我不知道“lambda”在这里是什么意思。它是在菜单选项下调用带参数的函数的唯一方法吗?

同样的问题是绑定键盘快捷键。 okno.bind("1", color_picker) - 将调用该函数但没有参数,该参数应该是一种颜色。我怎么能这样做?

那么,如何使用add_command将函数WITH参数,键盘快捷键和菜单分配?

PS。正在搜索谷歌,但似乎python没有像c#那样的好文档。或者我找到它太愚蠢了。

编辑:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
TypeError: color_picker() takes at most 1 argument (2 given)

当我尝试在okno.bind中使用“pick_red”时出现错误消息

1 个答案:

答案 0 :(得分:3)

我不确定我是否理解这个问题,但是这里有;

问题是你正在调用 color_picker函数(通过在函数名后添加())。

您要做的是将实际的函数,而不是函数调用的结果作为command关键字参数传递,例如: add_command(label="Czerwony", command=color_picker)

但是,由于你想给它一个固定的参数'red',你必须使用functools中的partial,例如;

from functools import partial
pick_red = partial(color_picker, "red")
kolory.add_command(label="Czerwony", command=pick_red)

修改

现在您的错误消息显示您正在使用Tkinter,我们可以看到,根据documentationbind()的功能始终通过event参数,所以你需要一个可以接受它的函数;

def pick_red_with_event(event):
    # We really do nothing with event for now but we always get it...
    color_picker("red")

okno.bind("1", pick_red_with_event)

<击> 同样适用于okno.bind,如果您已如上所述定义pick_red,只需执行以下操作:

okno.bind("1", pick_red)

<击>