更新mathematica中的进度条

时间:2010-12-09 12:31:01

标签: progress-bar wolfram-mathematica

在计算过程中,我会更新进度条的值,以通知用户计算的进度。

不幸的是,当我调用SetPropertyValue函数时,我无法做到这一点

ref@SetPropertyValue[{"bar", "value"}, 70];

该值未更新。

我以这种方式获得参考

ref = GUIRun[mainWindow];

3 个答案:

答案 0 :(得分:9)

使用Mathematica 6或更高版本尝试使用Monitor和ProgressIndicator而不是旧的GUIKit包:

With[{count = 1000}, 
 Monitor[Do[Pause[0.01];, {i, count}], 
  ProgressIndicator[Dynamic[i/count]]]]

答案 1 :(得分:6)

这只是@ ragfield答案的延伸。

如果你想表现有界和无界的数量,你就会沿着这些方向做点什么:

Clear["Global`*"];
count = 0; inRange = 0; i = 0; sumTgt = 10^5
Monitor[
  While[count < sumTgt,
   If[.14 < (rand = RandomReal[]) < .15, inRange++];
   count += rand;
  ]
  , {{"SumTillNow", ProgressIndicator[count,   {0, sumTgt}  ],count},
     {"InRange",    ProgressIndicator[inRange, Indeterminate],inRange}} 
   // MatrixForm
];

如果您想将进度指示器保存为演示文稿的动画gif等,您可以稍微修改一下:

count = 0; inRange = 0; i = 0; sumTgt = 10^4
Monitor[
  While[count < sumTgt,
   If[.14 < (rand = RandomReal[]) < .15, inRange++];
   count += rand;
  ]
  , a[++i] = Grid[
                 {{"SumTillNow", ProgressIndicator[count, {0, sumTgt}],count},       
                  {"InRange", ProgressIndicator[inRange, Indeterminate],inRange + 0.}},
              Frame -> All, Alignment -> {{Left, Center, Right}}, 
              ItemSize -> {{Automatic, Automatic, 8}}];
];
Export["c:\Anim.gif", Table[a[j]//MatrixForm, {j, i}],"DisplayDurations"->{.3}]  

结果是:

alt text

答案 2 :(得分:1)

你记得执行

吗?
Needs["GUIKit`"];

开始使用GUIKit之前?如果不是,您的命令将不会执行,因为它们不知道。如果在开始使用GUIKit后加载GUIKit,请不要忘记它的某些符号可能会被您无意中定义的符号遮挡。