按Enter键时,此代码必须移动三角形。我的回答是正确的,但我真的不明白这一点。
观看选项1->中的行def mov()
这应该在我打电话时起作用,但事实并非如此。
现在让我们再去选项2让我们去 - > def mov(A)
看我在那里有一个参数(A
)但是这个参数没有任何关于某个东西的连接,那么为什么它不能用我的选项1?它不一样吗?
我怎么知道何时必须使用这样的辅助参数?
选项1 -FAIL
from Tkinter import *
tk=Tk()
canvas=Canvas(tk,width=400,height=400)
canvas.pack()
canvas.create_polygon(10,10,10,60,50,35)
def mov():
canvas.move(1,5,0)
canvas.bind_all('<KeyPress-Return>',mov)
OPTION2 -WORK
from Tkinter import *
tk=Tk()
canvas=Canvas(tk,width=400,height=400)
canvas.pack()
canvas.create_polygon(10,10,10,60,50,35)
def mov(A):
canvas.move(1,5,0)
canvas.bind_all('<KeyPress-Return>',mov)
答案 0 :(得分:4)
如果您阅读了bind
的文档(bind_all
是bind
的文件包裹文件here,则会在整个应用程序中转发到bind
):
widget命令中的
bind
方法允许您注意 某些事件以及在该事件发生时触发回调函数 类型发生。 bind方法的形式是:<强>
def bind(self, sequence, func, add=''):
强>其中:
sequence
:是一个表示目标事件类型的字符串。 (有关详细信息,请参阅绑定手册页和 John Ousterhout 的书的第201页)。
func
:是一个Python函数,取一个参数,在事件发生时调用。一个Event实例将作为传递 论点。 (以这种方式部署的功能通常称为 回调)。
add
:可选,''
或'+'
。传递空字符串表示此绑定将替换此绑定的任何其他绑定 事件与。相关联。传递'+'
意味着此功能是 被添加到绑定到此事件类型的函数列表中。
(复制,粗体添加)
因此func
需要一个参数。由于 调用者无法知道 被调用者是否将使用该参数,因此与bind
或{{1}绑定的每个函数都是必须有正好一个参数。该参数包含事件参数:例如,按下了哪个键等等。
换句话说,它是一个契约,你提供一个带有一个参数的函数,你需要尊重这些契约。是否使用参数对Tkinter来说并不重要。