如何在 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_event
和 button_release_event
。
然后,在按下按钮时,您将保存起点的坐标。 (也保存到终点,目前相同)
在每个 motion_notify_event 上,您删除前一行(通过覆盖),并将其重新绘制到新的终点。
最后,当按钮被释放时,该行就结束了。
如果您使用 canvas 小部件, 会更容易,例如 GooCanvas, 负责大部分更新。您可以只更新线对象的坐标,它会自行移动。您也可以轻松删除线条。 'algorithm' 和上面类似:
- 将
button_press_event
、button_release_event
和 motion_notifyevent
连接到 canvas、
- 当按下按钮时,创建一个
GooCanvas.polyline
对象,并设置起点和终点,
- 在每个
motion_notify_event
上更新端点
- 以
button_release_event
结束。
我正在尝试使用 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
谢谢
你看到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_event
和 button_release_event
。
然后,在按下按钮时,您将保存起点的坐标。 (也保存到终点,目前相同)
在每个 motion_notify_event 上,您删除前一行(通过覆盖),并将其重新绘制到新的终点。
最后,当按钮被释放时,该行就结束了。
如果您使用 canvas 小部件, 会更容易,例如 GooCanvas, 负责大部分更新。您可以只更新线对象的坐标,它会自行移动。您也可以轻松删除线条。 'algorithm' 和上面类似:
- 将
button_press_event
、button_release_event
和motion_notifyevent
连接到 canvas、 - 当按下按钮时,创建一个
GooCanvas.polyline
对象,并设置起点和终点, - 在每个
motion_notify_event
上更新端点
- 以
button_release_event
结束。