TCL\TK 调整大小 window : 绑定

TCL\TK Resize window : bind

我在调整 window 大小时遇到​​问题,我不明白为什么,当我移动我的 window . 我的另一个 window 使用 .c bind cir <1> [list window %x %y]不要关注我window. 我相信我必须使用 <Configure> 作为选项,但我不知道该怎么做

感谢您的帮助

我的代码如下:

proc window {crx cry} {

set w1 .win
catch {destroy $w1}
toplevel $w1

wm minsize $w1 300 100
wm maxsize $w1 300 100

label $w1.l -text "$crx $cry"

pack $w1.l

}

wm state . zoomed

canvas .c -bg ivory

.c create oval 2 1.5 25 25 -fill #33FF00 -tag cir
.c create oval 30 30 50 50 -fill #33FF00 -tag cir1
.c create oval 60 60 90 90 -fill #33FF00 -tag cir2
.c create oval 90 90 130 130 -fill #33FF00 -tag cir3

pack .c -fill both -expand 1

.c bind cir <1> [list window %x %y]
.c bind cir1 <1> [list window %x %y]
.c bind cir2 <1> [list window %x %y]
.c bind cir3 <1> [list window %x %y]

一般来说,让一整组 windows 一起移动是糟糕的 GUI 设计;它使用户感到困惑。也就是说……

每当小部件被“重新配置”时,<Configure> 事件就会被发送到小部件,现在大多数情况下这意味着它的位置 相对于其父级 和大小发生了变化.你必须使用主 bind 命令,如果你 bind 到顶层,你需要记住顶层默认也会监听非顶层子级生成的事件;你通常需要一些过滤。

bind . <Configure> {
    if {"%W" eq [winfo toplevel %W]} {
        puts "reconfigured %W: (%x,%y) %wx%h"
    }
}

获得所需的过滤事件后,计算更新后的几何形状并将它们应用到 wm geometry