当窗口改变位置时如何执行特定代码?

时间:2014-08-28 12:55:51

标签: windows tcl tk

当用户点击窗口标题装饰并将鼠标拖动到新位置移动窗口时,我想执行特定代码。

命令" wm协议窗口?名称? ?命令&#34?;用于管理窗口管理器消息,如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 个答案:

答案 0 :(得分:1)

窗口位置应通过常规事件报告,即<Configure>事件。尝试做:

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

然后移动并调整.窗口的大小;您应该看到每个操作的事件。请注意,事件并不一定意味着移动;调整大小也会生成它们。与顶层上的任何绑定一样,您应该注意不要为其子窗口小部件报告它(请查看%W来解决这个问题)。您可能会发现%X%Y优于%x%y;实验...