【问题标题】:Tkinter Canvas: function runs without being calledTkinter Canvas:函数运行而不被调用
【发布时间】:2013-07-19 04:04:20
【问题描述】:

我开始在 Python 中使用 Canvas 对象。 我创建了以下简单的工作:目的是一个蓝色的三角形,当双击它时,它会变成黄色。 相反,它从一开始就是黄色的。我做错了什么?

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

【问题讨论】:

  • 当你绑定到不同的事件时会发生什么,例如''?
  • Joel:我选择不同的事件基本上是一样的。

标签: python events tkinter python-2.x tkinter-canvas


【解决方案1】:

在代码行中

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

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

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

【讨论】:

  • 非常感谢 murgatroid。当我进行更改时,三角形确实开始为蓝色。但是现在当我双击它时,我得到了错误: Traceback (most recent call last): File "/usr/lib64/python2.4/lib-tk/Tkinter.py", line 1345, in call return self.func(*args) TypeError: Yellow() 不接受任何参数(给定 1 个) 看起来很奇怪......我没有似乎传递任何参数!
  • 看起来 tkinter 将一个事件参数传递给事件处理程序,因此您想将 Yellow 的定义更改为 def Yellow(event):(保持其余部分相同)。附带说明一下,在 python 中,标准做法是小写函数名,CamelCase 类名
  • @DazVoz 顺便说一句,如果这个答案解决了你的问题,你应该点击复选标记来表示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多