【发布时间】:2013-03-15 15:33:12
【问题描述】:
我试图让用户在单击鼠标右键时删除行。我已将按钮 3 按下事件绑定到画布,并将其传递给以下函数
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)
根据字典初始化请求其他一些 sn-ps
def __init__(self, parent):
self.dictID = {}
... Some irrelevant code omitted
对于线的创建,我有两个处理程序,一个 on click 和一个 on release,它在两个坐标之间绘制线
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 ID
-
那我只能建议你删除条件之前的canvas的item。不过这个功能肯定没问题。
-
将workspace.delete 放在删除行的条件工作之外,但现在字典没有更新。我添加了一个打印语句,以查看条件是否打印为 true,即使该行已被删除,它是否打印为 false,这可能是什么原因?
标签: python tkinter tkinter-canvas