我正在尝试使用C/GTK3/CAIRO实现以下功能:
- 左单击 gtkdrawingarea 窗口小部件并printf坐标xo和yo。
- 保持左键向下,移动鼠标并绘制线将线(XO,YO(绘制到当前鼠标位置。
- 释放左鼠标按钮和printf("某物"(
我该怎么做?有人知道一个很好的教程,展示了如何处理鼠标clicl-move事件吗?
到目前为止,我发现最好的是此ZetCode线(它显示了如何处理鼠标点击事件,但不显示按钮/移动/按钮,这说明了如何在悬停窗口小部件时更改鼠标光标。
谢谢
您是否从GTK People中看到了这个GTKDrawingArea演示?这是用C编写的,但是有一个同一程序的Python版本(链接更新 - 谢谢@KyUuhachi(。
无论如何,在构造函数(__init__
(中,呼叫连接到motion_notify_event
。
您还需要连接到button_press_event
和button_release_event
。
然后,按下按钮,您可以保存起点的坐标。(并将其保存到终点,现在相同(。
在每个Motion_notify_event上,您可以删除上一行(通过覆盖(,然后将其重新绘制到新的终点。
最后,当按钮发布时,该行是最终的。
如果您使用帆布小部件,例如Goocanvas,它会更容易,它会照顾大多数更新。您只需更新行对象的坐标,它将自动移动。另外,您可以轻松删除线条。"算法"与上述类似:
- 将
button_press_event
,button_release_event
和motion_notifyevent
连接到画布, - 按下按钮发生时,创建一个
GooCanvas.polyline
对象,然后设置"开始"one_answers"端点" - 更新每个
motion_notify_event
上的端点 - 用
button_release_event
最终确定。