Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter-画布图形:can';是否将不同的标签绑定到多个图形?_Python_Python 2.7_Tkinter_Tkinter Canvas - Fatal编程技术网

Python Tkinter-画布图形:can';是否将不同的标签绑定到多个图形?

Python Tkinter-画布图形:can';是否将不同的标签绑定到多个图形?,python,python-2.7,tkinter,tkinter-canvas,Python,Python 2.7,Tkinter,Tkinter Canvas,我尝试在Tkinter画布上放置不同的图形,并为每个图形附加一个标记并绑定一个要执行的操作 例如:我在画布上放置4个点,给它们附加一个由其坐标组成的标记,并定义一个显示单击点坐标的操作,该坐标由他的标记标识 如果我在影响标签时打印标签,标签是不同的,但是当它显示坐标时,它总是最后添加的点,似乎所有标签最终都是相同的。。。我不明白:/ from Tkinter import * points=[(10,10),(60,10),(10,60),(60,60)] def check(pixel)

我尝试在Tkinter画布上放置不同的图形,并为每个图形附加一个标记并绑定一个要执行的操作

例如:我在画布上放置4个点,给它们附加一个由其坐标组成的标记,并定义一个显示单击点坐标的操作,该坐标由他的标记标识

如果我在影响标签时打印标签,标签是不同的,但是当它显示坐标时,它总是最后添加的点,似乎所有标签最终都是相同的。。。我不明白:/

from Tkinter import * 

points=[(10,10),(60,10),(10,60),(60,60)]

def check(pixel):
    print('===========')
    print('you clicked on:')
    print(pixel)

root = Tk()
canvas = Canvas(root, width=70, height=70)
print('----points list----')
for p in points:
    tag="("+str(p[0])+","+str(p[1])+")"
    print(tag)
    canvas.create_oval(p[0]-2,p[1]-2,p[0]+2,p[1]+2,tags=tag)
    canvas.tag_bind(tag, '<ButtonPress-1>', lambda event:check(tag))

canvas.pack()
root.mainloop()

有什么想法吗

我发现了原因,如果人们被困在同一点上:

使用命令tag_bind,如下所示:

for variable...
    canvas.tag_bind(item_id, '<ButtonPress-1>', lambda event:function(variable))
变量的
。。。
canvas.tag_bind(item_id',lambda事件:函数(变量))
不会在循环中工作,因为函数将在循环完成后接受全局变量“variable”=始终为最后一个值。 您需要在命令本身中定义变量:

for variable...
    canvas.tag_bind(item_id, '<ButtonPress-1>', lambda event, var=variable:function(var))
变量的
。。。
tag_bind(item_id',lambda事件,var=variable:function(var))
这样,您的函数将为每个项获取自己的变量,而不是为所有项获取一个变量

for variable...
    canvas.tag_bind(item_id, '<ButtonPress-1>', lambda event, var=variable:function(var))