Я хочу проверить, щелкнула ли мышь по строке на холсте Tkinter или нет, если по строке, то по какой строке. Я сделал это для обнаружения щелчков мыши.
class Link:
def __init__(self,Node1,Node2,canvas,width=5):
if self not in canvas.LinkList:
self.start_coor = Node1.Centre
self.final_coor = Node2.Centre
self.Canvas = canvas
self.Width = width
self.Shape = canvas.create_line(self.start_coor,self.final_coor,width=width)
Node1.connected(Node2)
self.Canvas.LinkList.append(self)
self.Nodes = [Node1,Node2]
self.Clicked = False
dy = self.final_coor[1] - self.start_coor[1]
dx = self.final_coor[0] - self.start_coor[0]
self.m = dy/dx
self.c = self.start_coor[1] - self.m*self.start_coor[0]
def onLineCheck(self,x,y,field=False):
#y = mx + c
#y - mx - c = 0
if not field:
field = self.Width
if (x < self.start_coor[0] and x < self.final_coor[1]) or (x > self.start_coor[0] and x > self.final_coor[1]) or (y < self.start_coor[1] and y < self.final_coor[1]) or (y > self.start_coor[1] and y > self.final_coor[1]):
return False
temp = y - (self.m*x) - self.c
if abs(temp) <= field:
return True
return False
class InputCanvas(Canvas):
def __init__(self,master=None, **kw):
super().__init__(master,**kw)
self.NodeList = []
self.LinkList = []
self.Mode = "Nodes"
def anyLinkClicked(self,e):
x,y = getMousePosition(e)
for l in self.LinkList:
if l.onLineCheck(x,y):
return l
return False
Каждый раз, когда создается ссылка, она автоматически добавляется в canvas.LinkList. Я уверен, что эта часть кода работает правильно. Пока что программа хорошо работает с 1 строкой на Canvas (даже если я удалю ее и нарисую новую, она все еще работает), но не может обработать более 1 строки, она может отвечать только на первую созданную строку. Даже если я удалю первую строку, вторая созданная строка не будет работать. Я попытался распечатать результат каждого onLineCheck (), похоже, что l oop правильно проходит по каждой строке, но не ловит щелчки мышью. Любая идея, чтобы помочь?