2017-05-03 109 views
1

我試圖實現使用C/GTK3 /開羅以下特點:如何在GTK3中處理鼠標移動事件?

- 左點擊一個GtkDrawingArea的Widget和printf座標XO和呦。

- 按住左鍵不放,移動鼠標並繪製一條連線(Xo,Yo)到當前鼠標位置。

- 鬆開鼠標左鍵和printf(「東西」)

我該怎麼辦呢?任何人都知道一個很好的教程,展示如何處理鼠標移動事件?

到目前爲止,我發現是最好的這zetcode lines(這表明如何處理鼠標點擊事件,但沒有按鈕式/移動/按鈕並this,這也解釋瞭如何更改鼠標光標懸停在當窗口小部件。

感謝

+1

第一個鏈接,你應該能夠實現你的步驟1和3.如果這還不夠,請提供顯示你的問題的[MCVE](http://stackoverflow.com/help/mcve)。 – Gerhardh

+1

對於第2步,你需要保存在您按下按鈕,然後處理'「運動通知事件」'對於鼠標的任何移動。 – Gerhardh

回答

1

你看到this GtkDrawingArea demo從GTK的人嗎?這一個是用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對象,並設置開始和端點,
  • 更新每個motion_notify_event
  • 端點完成與一個button_release_event