我正在使用第三方软件,它允许我在 TCL 中添加简单/基本的 GUI。我的脚本非常基本,它从某些目录复制文件,然后压缩文件夹。
由于部分文件较大,压缩过程需要一段时间。因此,我想为用户提供一些关于脚本执行时发生的情况的视觉提示。
现在我已经完成了上述所有操作,添加了进度条,但似乎无法更新它,即没有绿色条从 0% 进展到 100%
下面是进度条代码的一些片段。
set v 0
ttk::progressbar $tw.pbt.p1 -orient horizontal -length 200 -mode determinate -maximum 100 -variable v
gridrc 1 1 $tw.pbt.p1 -sticky we -padx 5 -pady 10 -columnspan 3
grid columnconfigure $tw.pbt 2 -weight 1
请注意,上面的代码是在第三方软件的框架内编写的,因此是“gridrc”(我认为这是特定于他们的环境的)。
for {set v 0} {$v < 1000} {incr v 10} {
after 100; update }
For 循环位于一个过程中,当用户按下按钮复制文件时执行它。无论我尝试什么,我似乎都无法
-variable v
更新进度条。
我想知道是否有人可以指出我的错误或给我举一个例子。
ps:查看进度条上的Active State Active TCL示例,可以理解“开始按钮”是如何更新进度条的。
提前谢谢您。
两个可能的原因是:
update
,因此这不适用),并且Tk 小部件在(特定 Tcl 解释器的)全局命名空间中解析其状态变量。一直都做过。如果您的
for
循环在过程或不同的解释器中运行,则 v
变量将会不同,并且该小部件将看不到更改。
如果您正在执行某个程序,请在开始查看之前将
global v
添加到其正文中。
如果您使用不同的解释器,最简单的选择是在正确的解释器中运行代码!您可以通过跟踪来完成复杂的事情,以便在解释器之间同步内容……但这确实不是我建议的做法,因为在大多数情况下,在正确的位置运行代码会容易得多。 (如果您根本无法连接到运行 GUI 的解释器来执行此操作,那么您可能会陷入困境。解释器边界被设计作为安全边界。)