2014-08-28 40 views
2

我想在用戶點擊窗口標題裝飾並將鼠標拖到新位置時移動窗口時執行特定的代碼。如何在窗口改變位置時執行特定代碼?

命令「wm protocol window?name??command?」用於管理窗口管理器消息,如WM_DELETE_WINDOW。 嘗試下面的代碼,當窗口已被移動並不做任何事情..

package require Tk 

wm title . "move test" 
wm protocol . WM_MOVE {puts "window has been moved!"} 

看來Tk的不知道有關消息WM_MOVE所以忽略它。 但是捕獲WM_DELETE_WINDOW消息而不是WM_MOVE,上面的代碼工作。

我錯過了什麼嗎? 是否有另一種編程方式對窗口位置變化作出反應?

回答

1

窗口位置應通過常規事件報告,即<Configure>事件。試試看:

bind . <Configure> {puts x=%x,y=%y,width=%w,height=%h} 

然後移動並調整.窗口的大小;你應該看到每個這些行爲的事件。請注意,這些事件並不一定意味着此舉;調整大小也會生成它們。就像在頂層綁定一樣,你應該注意它沒有被報告給它的一個子部件(查看%W來解決這個問題)。您可能會發現%X%Y優於%x%y;實驗...

相關問題