如何在Tkinter Python GUI中找到鼠标点击附近的标签

3 投票
3 回答
5127 浏览
提问于 2025-04-17 19:58

我怎么才能找到鼠标点击附近的标签呢?在我这里,“识别”就是要找到离鼠标点击位置非常近的标签。

from Tkinter import *
root = Tk()
f=Frame(root)
f.grid()
w=Canvas(f)
line1=w.create_line(50,50,150,150, width=5, tags="line1")
line2=w.create_line(100,100,100,350, width=3, tags="line2")
line3=w.create_line(150,150,150,450, width=3, tags="lines")
w.grid(row=0, column=0)
w.bind("<Button-1>", identify)
def identify(event): ## this should identify the tag near to click

u=Frame(f)
u.grid(row=0, column=1)
root.mainloop()

谢谢

3 个回答

0

你可以直接在画布上获取这个项目,并找到与它相关的标签。

def find_item(event):
    item = canvas.find_withtag('current')[0]
    print(canvas.gettags(item))
3

Canvas 提供了一些 查找方法。在这里,find_closest 方法正好符合你的需求。

def identify(event):
    closest = w.find_closest(event.x,event.y)[0]

注意,如果你改变了画布的视口(比如平移、缩放等),你需要把事件坐标转换成画布坐标。

def callback(event):
    canvas = event.widget
    x = canvas.canvasx(event.x)
    y = canvas.canvasy(event.y)
    print canvas.find_closest(x, y)

(摘自 effbot.org)

6

使用 find_closestgettags

def identify(event):
    item = w.find_closest(event.x, event.y)[0]
    tags = w.gettags(item)
    print tags

顺便提一下,你需要在把这个函数和事件绑定之前先定义好它。

撰写回答