Python 3.8 / Tkinter:画布中的项目无法从循环内绑定到函数

问题描述 投票:0回答:1

我不明白为什么这小段代码会起作用对于绿色点来说很好(当我单击它时,显示的标签就可以了)但对于红色部分根本不知道(标签始终是相同的,尽管循环:最新的循环)。

是错误吗?还是我想念什么?

import tkinter as tk

def show(event, p, tag):
    print(f"{p=}\n{tag=}")


centers = [[50, 50], [90, 50]]

root = tk.Tk()
canvas = tk.Canvas()
canvas.grid(row=0, column=0, sticky='news')

p1 = canvas.create_oval(20,10,30,20, fill='green',tags=('point_green_1', 'draw'))
p2 = canvas.create_oval(50,10,60,20, fill='green',tags=('point_green_2', 'draw'))
canvas.tag_bind(p1, '<Button-1>', lambda event: show(event, p1, ('point_green_1', 'draw')))
canvas.tag_bind(p2, '<Button-1>', lambda event: show(event, p2, ('point_green_2', 'draw')))

for idx, center in enumerate(centers):
    tag= f'point_{idx}'
    p=canvas.create_oval(center[0] - 5, center[1] - 5, center[0] + 5, center[1] + 5, fill='red',
                         tags=(tag, 'draw'))
    canvas.tag_bind(p, '<Button-1>', lambda event: show(event, p, tag))

root.mainloop()
canvas tkinter bind
1个回答
0
投票

更改此代码

© www.soinside.com 2019 - 2024. All rights reserved.