等到标签显示

wait until label gets displayed

所以在我的 Tcl/Tk 应用程序中,我有一个带有文本变量的标签:

    label .mylabel -textvariable statustext -relief sunken -anchor w

而且我可以使用 set statustext "sponatenous error".

之类的东西来很好地更改标签的内容

不幸的是,有时更新此变量后会进行一些“繁重的处理”,这会使 GUI 停滞一段时间(例如,从 Internet 下载文件)。

set statustext "downloading from $url"
download $url

由于事件队列被阻塞(至少,我是这么想的),GUI 没有得到任何刷新,label 没有显示我的最新消息。

有没有办法在开始我的“繁重过程”之前强制更新标签文本(最好通过文本变量)?

如果您在繁重的处理之前执行update idletasks 实际的 GUI 更新代码将 运行。 Tk 以这种方式工作,因为 actual GUI 绘图非常昂贵,这允许它有效地进行更新。这是一个 非常 聪明的设计,它使 Tk GUI 在 25 年多的时间里看起来超级快。

在某些情况下,完整的 update 是必需的——这可能会导致事件处理重入的各种问题——但更新标签通常可以使用更便宜、更简单的变体来完成。如果您的更改不会改变标签的实际大小(这取决于您如何处理整个包含顶层的几何管理,这是一个很大的话题),那是 尤其是 正确的.作为提示,当您动态更改标签的文本时,如果您的 GUI 不自行调整大小通常是最好的;否则,这可能会让用户迷失方向。