マウスの右ボタンがクリックされたときにユーザーに行を削除させようとしています。ボタン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)
ディクショナリの初期化からのリクエストごとのその他のスニペット
def __init__(self, parent):
self.dictID = {}
... Some irrelevant code omitted
線の作成には、2 つのハンドラーがあります。クリック時とリリース時で、両方の座標間に線を描画します。
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
辞書はここでうまく印刷されます。これらはすべて 1 つのクラス内の関数であることに注意してください。