【问题标题】:How to execute specific code when a window changed position?窗口更改位置时如何执行特定代码?
【发布时间】:2014-08-28 22:19:54
【问题描述】:

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

命令“wm 协议窗口?名称??命令?”用于管理像 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 上面的代码有效。

我错过了什么吗? 是否有另一种方法可以以编程方式对窗口位置的变化做出反应?

【问题讨论】:

    标签: windows tcl tk


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      相关资源
      最近更新 更多