Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 等待标签显示_Tcl_Tk_Tcltk - Fatal编程技术网

Tcl 等待标签显示

Tcl 等待标签显示,tcl,tk,tcltk,Tcl,Tk,Tcltk,因此,在我的Tcl/Tk应用程序中,我有一个带有文本变量的标签: label .mylabel -textvariable statustext -relief sunken -anchor w 我可以通过使用类似于set statustext“自发性错误”的方法来更改标签的内容 不幸的是,有时更新此变量后会出现一些“繁重的处理”,使GUI暂停一段时间(例如,从internet下载文件) 由于事件队列被阻塞(至少,我猜是这样),GUI不会得到任何刷新,标签不会显示我的最新消息 在开始我

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

    label .mylabel -textvariable statustext -relief sunken -anchor w
我可以通过使用类似于
set statustext“自发性错误”
的方法来更改标签的内容

不幸的是,有时更新此变量后会出现一些“繁重的处理”,使GUI暂停一段时间(例如,从internet下载文件)

由于事件队列被阻塞(至少,我猜是这样),GUI不会得到任何刷新,
标签
不会显示我的最新消息


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

如果在繁重处理之前执行
更新idletasks
,实际的GUI更新代码将运行。Tk就是这样工作的,因为实际的GUI绘图非常昂贵,这使得它能够高效地进行批量更新。这是一个非常聪明的设计,使Tk GUI在超过25年的时间里看起来超级快速


在某些情况下,需要进行完整的
更新
,这可能会导致事件处理的可重入性出现各种问题,但更新标签通常可以使用更便宜、麻烦更少的变体来完成。如果您的更改没有改变标签的实际大小(这取决于您如何处理整个包含toplevel的几何体管理,这是一个巨大的主题),则尤其如此。作为提示,当您动态更改标签的文本时,如果GUI不调整自身大小通常是最好的;否则,这可能会让用户有点迷失方向。

我想知道是否有可能在后台下载?I/O绑定处理通常很容易转换为使用基于事件的代码完成。
set statustext "downloading from $url"
download $url