Python - 参数有时是,有时没有

时间:2017-02-14 13:35:04

标签: python tkinter

按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)

1 个答案:

答案 0 :(得分:4)

如果您阅读了bind的文档(bind_allbind的文件包裹文件here,则会在整个应用程序中转发到bind ):

  

widget命令中的bind方法允许您注意   某些事件以及在该事件发生时触发回调函数   类型发生。 bind方法的形式是:

     

<强> def bind(self, sequence, func, add=''):

     

其中:

     
      
  • sequence:是一个表示目标事件类型的字符串。 (有关详细信息,请参阅绑定手册页和 John Ousterhout 的书的第201页)。

  •   
  • func:是一个Python函数,取一个参数,在事件发生时调用。一个Event实例将作为传递   论点。 (以这种方式部署的功能通常称为   回调)。

  •   
  • add:可选,'''+'。传递空字符串表示此绑定将替换此绑定的任何其他绑定   事件与。相关联。传递'+'意味着此功能是   被添加到绑定到此事件类型的函数列表中。

  •   

(复制,粗体添加)

因此func需要一个参数。由于 调用者无法知道 被调用者是否将使用该参数,因此与bind或{{1}绑定的每个函数都是必须有正好一个参数。该参数包含事件参数:例如,按下了哪个键等等。

换句话说,它是一个契约,你提供一个带有一个参数的函数,你需要尊重这些契约。是否使用参数对Tkinter来说并不重要。