我正在研究一个拖放功能,它允许我在画布上移动项目。我让它工作(有点),但我只移动一点点,但线会穿过屏幕(最终离开画布的可见部分,所以我无法到达它)。我不知道从这里到哪里去。下面是我迄今为止创建的拖放代码:
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是我用来存储数据的字典。最初我认为将画布坐标转换为窗口坐标会有帮助,但它的作用与没有这些东西一样。
This answer到“移动椭圆的图板绘图代码”的问题显示了如何在画布上拖动对象。
在您的情况下,移动对象时不会重置增量的基部。如果鼠标向右移动一个像素,则使用
move
将鼠标向右移动一个像素。现在,假设你再向右移动一个像素。这一次,你的计算结果是,虽然你实际上只移动了鼠标一个像素,但增量是从起点开始的2。下次移动一个像素时,将计算3的增量,以此类推。
解决方法很简单:在它移动时重置
dragInfo["xCoord"]
和dragInfo["yCoord"]
,因为您只想计算到它的前一个位置的增量,而不是原始的起始位置。相关问题 更多 >
编程相关推荐