当用户点击窗口标题装饰并将鼠标拖动到新位置移动窗口时,我想执行特定代码。
命令" 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,上述代码可以正常工作。
我错过了什么吗? 还有另一种方法可以以编程方式对窗口位置的变化作出反应吗?
答案 0 :(得分:1)
窗口位置应通过常规事件报告,即<Configure>
事件。尝试做:
bind . <Configure> {puts x=%x,y=%y,width=%w,height=%h}
然后移动并调整.
窗口的大小;您应该看到每个操作的事件。请注意,事件并不一定意味着移动;调整大小也会生成它们。与顶层上的任何绑定一样,您应该注意不要为其子窗口小部件报告它(请查看%W
来解决这个问题)。您可能会发现%X
和%Y
优于%x
和%y
;实验...