等到窗口大小合适后再执行我的函数

问题描述 投票:0回答:1

我需要在窗口大小改变时立即执行一个函数,这个函数非常消耗像这样的:

set originalWidth 500
set originalHeight 500

bind .l <Configure> [list procConfig %W %w %h]

proc procConfig  {W w h} {

    if {($w != $::originalWidth) || ($h != $::originalHeight)} {
        myfunction "arg1" "arg2"
    }
}

我遇到的问题是,一旦尺寸发生变化,

myfunction
就会执行,而不是在我释放鼠标按钮后执行(或者我的小部件
.l
设置为正确的大小)。 有没有办法阻止
myfunction
的执行,并在获得所需尺寸后执行它?

编辑:

我尝试使用

after
命令实现另一个解决方案

procConfig2 .l ; # recursive proc

proc procConfig2 {W} {

    if {([winfo width $W] != $::originalWidth) || ([winfo height $W] != $::originalHeight)} {
        myfunction "arg1" "arg2"
    }
    after 10 [list procConfig2 $W]
}

但我得到了大致相同的结果。

tcl tk-toolkit
1个回答
0
投票

您可以在

<Configure>
回调中设置一个标志,表示您 will 调用您的函数,然后实际上仅在您确定需要执行此操作时才调用它。困难在于,有时很难确定什么时候是正确的时间;如果它是由内部事件驱动的,那么您可以在
<ButtonRelease>
或类似的东西上执行此操作,但是当它是由窗口管理器的指令驱动时,则根本没有事件表明“用户已停止更改大小”。我想您可以设置一个延迟,以便它在最后一个运动事件后 100 毫秒发生,但这始终是一个猜测。 (您可以通过像以前一样设置后事件来做到这一点,但在下一个运动事件的处理程序开始时取消该事件。)

© www.soinside.com 2019 - 2024. All rights reserved.