У меня возникли проблемы с пониманием того, как обновить виджет в 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;
}
Я также вызов этого прок в другой прок, в котором я также отключить кнопку до начала сканирования и повторное включение его после; но это тоже не работает. Сценарий не позволяет моим виджетам вообще обновляться до выполнения proc proc? Как я могу получить желаемый результат?
Спасибо!
Вы не позволяете циклу событий работать и выполнять свою работу. Взгляните на http://wiki.tcl.tk/946 – schlenk
Спасибо! Это очень помогло. – Grandclosing