【问题标题】:Python - TKinter - Moving shape on canvas with a mousePython - TKinter - 用鼠标在画布上移动形状
【发布时间】:2019-11-10 13:50:27
【问题描述】:

我需要找到一种方法来编写以下代码

1. 有一个几何对象,其中包含一组点,然后在画布小部件上绘制这些点(已涵盖)

2.当您在画布上单击鼠标左键时,它会检查您是否在现有点的某个边距内单击,如果是这样,则选择了数组中的一个点(在搜索该点并选择它时涵盖了这一点)

3.一旦被选中,该点将跟随鼠标直到释放鼠标按钮。

单独使用 Motion 事件似乎不起作用,因为在按下按钮时似乎会一遍又一遍地调用该函数。所以我需要在按下按钮时触发搜索功能,在按住按钮时触发移动功能。

不胜感激。

【问题讨论】:

  • 你的说法,好像你已经想通了。您描述的解决方案的哪一部分(“按下按钮时触发搜索功能,按住按钮时触发移动功能”)您遇到问题?
  • 所以问题来了 - 我将搜索绑定到 button-3 假设 - 我只得到那个事件的 x,y。如何为移动功能获取鼠标运动的 xy。基本上我希望它是一种拖放行为。因此,在成功单击该点后,会出现类似 'while(rightMouseButton is hold) pointxy = mouse xy'
  • 哦,您知道/尝试过'<B3-Motion>' 事件吗? effbot.org/tkinterbook/tkinter-events-and-bindings.htm 这似乎涵盖了您的情况,但不要忘记它可能会被某人单击并拖动画布的空白区域来调用。
  • 我做了 - 所以发生的事情是 - 在按下按钮时循环调用函数,这对于移动函数本身来说很酷。然而,这个移动函数必须在实际选择点之后调用,我不知道如何从搜索函数中调用它,以便它获得 事件坐标。
  • “非常适合指针”对于 stackoverflow 来说不是一个合适的问题。你需要更具体。如果您能提供minimal reproducible example,这将有所帮助。你用了很多词,但听起来你真正要问的只是如何在画布上拖动一个项目。那是对的吗?你做过研究吗?例如,你见过这样的:stackoverflow.com/a/6789351/7432

标签: python tkinter


【解决方案1】:

感谢 Dan Getz,我做到了以下几点: -将点选择绑定到选择点并将索引存储在self.selectedPoint中 -将移动函数绑定到使用 self.selectedPoint 来指示数组中的选定点,然后将事件 x,y 坐标作为选定点的新坐标传递给数组 - 绑定 clearSelected 函数以将 self.selectedPoint 设置为 -1 从而清除选择

我仍然遇到的问题是,当移动点时,我会在按住鼠标的同时更新屏幕,这会产生相当多的闪烁。我想知道是否有什么我可以做的来防止这种情况发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 2014-11-05
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多