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

时间:2017-05-03 15:01:04

标签: c mouseevent gtk3 cairo

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

-Left点击 GtkDrawingArea 小部件,然后打印坐标Xo和Yo。

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

- 释放鼠标左键和printf("某些东西")

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

到目前为止,我发现的最好的是这个zetcode lines(它显示了如何处理鼠标点击事件但不显示按钮按下/移动/按钮和this,这解释了如何更改将鼠标光标悬停在Widget上时。

由于

1 个答案:

答案 0 :(得分:1)

你有没有看到Gtk人的this GtkDrawingArea demo?这个是用C语言编写的,但是there is a Python version是同一个程序。可惜它的格式不是很好。

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

您还需要连接到button_press_eventbutton_release_event

然后,按下按钮,可以保存起点的坐标。 (并将其保存到终点,现在也是如此)。

在每个motion_notify_event上,删除上一行(通过覆盖),并将其重绘为新的结束点。

最后,当释放按钮时,该行是最终的。

如果你使用画布小部件,那么很多会更容易,例如GooCanvas,负责大部分的更新。您只需更新线对象的坐标,它就会自动移动。您也可以轻松删除线条。 '算法'与上面类似:

  • button_press_eventbutton_release_eventmotion_notifyevent连接到画布,
  • 按下按钮时,创建一个GooCanvas.polyline对象,并设置begin和endpoint,
  • 更新每个motion_notify_event
  • 上的端点
  • 使用button_release_event完成。