TCL 脚本中进度条未更新

问题描述 投票:0回答:1

我正在使用第三方软件,它允许我在 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示例,可以理解“开始按钮”是如何更新进度条的。

提前谢谢您。

tcl
1个回答
0
投票

两个可能的原因是:

  1. 不运行事件循环(但您正在调用
    update
    ,因此这不适用),并且
  2. 没有更新正确的变量。这似乎更有可能。

Tk 小部件在(特定 Tcl 解释器的)全局命名空间中解析其状态变量。一直都做过。如果您的

for
循环在过程或不同的解释器中运行,则
v
变量将会不同,并且该小部件将看不到更改。

如果您正在执行某个程序,请在开始查看之前将

global v
添加到其正文中。

如果您使用不同的解释器,最简单的选择是在正确的解释器中运行代码!您可以通过跟踪来完成复杂的事情,以便在解释器之间同步内容……但这确实不是我建议的做法,因为在大多数情况下,在正确的位置运行代码会容易得多。 (如果您根本无法连接到运行 GUI 的解释器来执行此操作,那么您可能会陷入困境。解释器边界被设计作为安全边界。)

© www.soinside.com 2019 - 2024. All rights reserved.