2013-07-19 34 views
0

我开始在Python中使用Canvas对象。 我创建了以下简单的工作:意图是一个蓝色三角形,当双击时,它变成黄色。 相反,它从一开始就是黄色的。我究竟做错了什么?Python画布:函数运行时不会被调用

#!/usr/bin/python 
from Tkinter import * 

def Yellow(): 
    canv.itemconfigure(obj,fill='yellow') 

root=Tk() 
canv=Canvas(root,width=200,height=200) 
obj=canv.create_polygon(100,100,120,120,120,80,fill='blue') 
canv.tag_bind(obj,'<Double-1>',Yellow()) 
canv.pack() 
root.mainloop() 
+0

当你绑定到不同的事件''时会发生什么? –

+0

Joel: 基本上,当我选择不同的事件时是一样的。 –

回答

2

在代码

canv.tag_bind(obj,'<Double-1>',Yellow()) 

表达Yellow()行调用叫做Yellow的功能。为了简单地引用一个函数(比如绑定到一个事件)而不是调用它,你应该只写Yellow。所以你的代码应该改为

canv.tag_bind(obj,'<Double-1>',Yellow) 
+0

非常感谢murgatroid。 当我做出改变时,三角形确实开始变蓝。但现在当我双击它,我得到的错误: 回溯(最近通话最后一个): 文件“/usr/lib64/python2.4/lib-tk/Tkinter.py”,行1345,在__call__ 回报self.func(*参数) 类型错误:黄色()不带任何参数(1给出) 似乎很奇怪......我不_seem_已通过任何参数! –

+0

它看起来像tkinter传递一个事件处理程序的事件参数,所以你想改变你的'黄色'定义为'def黄色(事件):'(保持其余的一样)。顺便提一句,在python中,标准做法是小写函数名称和CamelCase类的名称 – murgatroid99

+0

@DazVoz顺便说一句,如果这个答案解决了你的问题,你应该点击复选标记来表示这个。 – murgatroid99