我想指出,我从短时间开始学习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”时出现错误消息
答案 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
,我们可以看到,根据documentation,bind()
的功能始终通过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)
击> <击> 撞击>