我有一个基于Tcl / Tk的应用程序,我需要将一些大文件从Windows发送到vm。我正在使用fcopy,它工作正常。但由于文件大小可能很大(以GB为单位),因此应用程序将被阻止1分钟或更长时间。由于进行操作取决于文件的副本,我不能使其成为非阻塞/后台副本。
因此,我想要显示一个进度条,让用户知道操作正在进行中并让他们猜测他们的等待时间(我不打算自己计算,用户可能会自己猜测)。实现这个目的的方法是什么?我得到了一个写入的页面"以块的形式复制文件并更新界面"但没有得到任何参考。
他们有更好的选择吗?请指导。
答案 0 :(得分:0)
fcopy
文档中有一个示例:
proc CopyMore {in out chunk bytes {error {}}} {
global total done
incr total $bytes
if {$error ne "" || [eof $in]} {
set done $total
close $in
close $out
} else {
# Add progress bar update here
fcopy $in $out ‐size $chunk \
‐command [list CopyMore $in $out $chunk]
}
}
set in [open $file1 rb]; # Wherever this comes from
set out [open $file2 wb]; # Wherever it is going to
set chunk 1024
set total 0
fcopy $in $out ‐size $chunk \
‐command [list CopyMore $in $out $chunk]
vwait done
您需要做的就是将进度条的更新添加到那里,到目前为止已经复制了total
个字节。