キャンバス上でアイテムを移動できるようにするドラッグアンドドロップ機能に取り組んでいます.動作していますが(一種)、少ししか移動しませんが、線が画面を横切って撮影します(最終的にはキャンバスなので、そこにたどり着けません。ここからどこへ行けばよいかわかりません。以下は、これまでに作成したドラッグ アンド ドロップ コードです。
def onPressToMove(self, event): #get initial location of object to be moved
winX = event.x - self.workspace.canvasx(0)
winY = event.y - self.workspace.canvasy(0)
self.dragInfo["Widget"] = self.workspace.find_closest(event.x, event.y, halo = 5)[0]
self.dragInfo["xCoord"] = winX
self.dragInfo["yCoord"] = winY
def onReleaseToMove(self, event): #reset data on release
self.dragInfo["Widget"] = None
self.dragInfo["xCoord"] = 0
self.dragInfo["yCoord"] = 0
def onMovement(self, event):
winX = event.x - self.workspace.canvasx(0)
winY = event.y - self.workspace.canvasy(0)
newX = winX - self.dragInfo["xCoord"]
newY = winY - self.dragInfo["yCoord"]
self.workspace.move(self.dragInfo["Widget"], newX, newY)
dragInfo は、データの保存に使用している辞書です。元々、キャンバス座標をウィンドウ座標に変換すると役立つと思っていましたが、それがない場合と同じように動作します。