【发布时间】:2015-01-08 14:41:17
【问题描述】:
我无法理解如何更新 Tk 中的小部件以反映正在进行的过程。 基本上,现在我的程序是递归扫描一个目录,并且应该将它找到的每个目录/文件一次输出到一个文本小部件。我的问题是,脚本不是这样做,而是找到所有目录,然后在完成后立即输出所有内容。代码如下:
proc scan {{dir .}} {
global num_items_found vs_list ec_list
foreach i [lsort [glob -nocomplain -dir $dir *]] {
if {[file type $i]=="directory"} {
.main.body.log insert end "Checking $i\n";
scan $i;
} else {
if {[string tolower [file tail $i]] eq "buildlog.htm"} {
lappend vs_list $i;
incr num_items_found;
.main.body.log insert end "Found $i\n";
} elseif {[file extension $i] eq ".log"} {
lappend ec_list $i;
incr num_items_found;
.main.body.log insert end "Found $i\n";
}
}
}
return;
}
我也在一个不同的过程中调用这个过程,在这个过程中我也在扫描之前禁用一个按钮并在之后重新启用它;但这也不起作用。在扫描过程执行之前,脚本根本不允许我的小部件更新?我怎样才能得到想要的结果?
谢谢!
【问题讨论】:
-
你不要让事件循环运行并完成它的工作。看看wiki.tcl.tk/946
-
谢谢!这对阅读很有帮助。