如何在 GTK3 中处理鼠标移动事件?

How to handle mouse motion events in GTK3?

我正在尝试使用 C/GTK3/Cairo 实现以下功能:

-左键单击 GtkDrawingArea 小部件并打印坐标 Xo 和 Yo。

-在按住左键的同时,移动鼠标并绘制一条连接 (Xo,Yo) 到当前鼠标位置的线。

-松开鼠标左键并printf("something")

我该怎么做?任何人都知道展示如何处理鼠标 clicl-move 事件的好教程吗?

到目前为止,我找到的最好的是这个 zetcode lines (which shows how to handle mouse click events but not button-down/move/button-up and ,它解释了如何在悬停在 Widget 上时更改鼠标光标。

谢谢

你看到this GtkDrawingArea demo from the Gtk people? This one is written in C, but there is a Python version同一个节目了吗。遗憾的是它的格式不是很好。

无论如何,在构造函数(__init__)中,调用连接到motion_notify_event

您还需要连接到 button_press_eventbutton_release_event

然后,在按下按钮时,您将保存起点的坐标。 (也保存到终点,目前相同)

在每个 motion_notify_event 上,您删除前一行(通过覆盖),并将其重新绘制到新的终点。

最后,当按钮被释放时,该行就结束了。

如果您使用 canvas 小部件, 会更容易,例如 GooCanvas, 负责大部分更新。您可以只更新线对象的坐标,它会自行移动。您也可以轻松删除线条。 'algorithm' 和上面类似:

  • button_press_eventbutton_release_eventmotion_notifyevent 连接到 canvas、
  • 当按下按钮时,创建一个 GooCanvas.polyline 对象,并设置起点和终点,
  • 在每个 motion_notify_event
  • 上更新端点
  • button_release_event 结束。