Я пытаюсь, чтобы пользователь удалял строки при нажатии правой кнопки мыши. Я переплетены пресс событие кнопки 3 на холст, и передал, что к следующей функцииУдаление строк на холсте python tkinter
def eraseItem(self,event):
objectToBeDeleted = self.workspace.find_closest(event.x, event.y, halo = 5)
if objectToBeDeleted in self.dictID:
del self.dictID[objectToBeDeleted]
self.workspace.delete(objectToBeDeleted)
Однако ничего не происходит, когда я правой кнопкой мыши на линии. Я проверил словарь отдельно, и объекты линии хранятся правильно.
Вот мой привязки:
self.workspace.bind("<Button-3>", self.eraseItem)
По желанию некоторых других фрагментов из инициализации словаря
def __init__(self, parent):
self.dictID = {}
... Some irrelevant code omitted
Для создания линии у меня есть два обработчика, по щелчку и на выпуске, который втягивает линии между обеими координатами
def onLineClick(self, event):
self.coords = (event.x, event.y)
def onLineRelease(self, event):
currentLine = self.workspace.create_line(self.coords[0], self.coords[1], event.x, event.y, width = 2, capstyle = ROUND)
self.dictID[currentLine] = self.workspace.coords(currentLine)
print(self.dictID.keys()) #For testing dictionary population
print(self.dictID.values()) #For testing dictionary population
Словарь печатает хорошо здесь. Обратите внимание, что это все функции в пределах одного класса.
Ваш код (по крайней мере эта функция) выглядит хорошо. Правильно ли связан обработчик события? Попробуйте напечатать 'objectToBeDeleted'. –
И да, он правильно печатает соответствующий идентификатор Canvas при печати после назначения переменной – user2148990
Тогда я могу только предложить вам удалить элемент холста перед условным. Но определенно эта функция не имеет никаких проблем. –