2010-12-09 15 views
6

durante el cálculo, actualizaría el valor de la barra de progreso para notificar al usuario el progreso del cálculo.Actualizar una barra de progreso en mathematica

Desafortunadamente no soy capaz de hacer esto porque cuando llamo a la función SetPropertyValue

[email protected][{"bar", "value"}, 70]; 

el valor no se actualiza.

Obtengo ref de esta manera

ref = GUIRun[mainWindow]; 

Respuesta

1

¿Se acordó de ejecutar

Needs["GUIKit`"]; 

antes de comenzar a utilizar el GUIKit? Si no, sus comandos no se ejecutarán, porque no se conocen. Si carga el GUIKit después de comenzar a usarlo, no olvide que algunos de sus símbolos pueden aparecer sombreados por los símbolos que ha definido inadvertidamente.

+0

Gracias, ya lo hice. – pAkY88

9

Con Mathematica 6 o posterior a tratar con el Monitor y ProgressIndicator lugar del paquete GUIKit mayores:

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

El problema es que actualizaría el indicador de progreso en el cálculo, y no puedo predecir el tiempo de cálculo, por lo que actualizaría el estado del indicador de progreso dinámicamente, por ejemplo cuando ocurran algunos eventos. ¿Cómo puedo hacer esto? – pAkY88

+0

No estoy seguro de entender por completo su pregunta de seguimiento. La expresión i/count dentro de Dynamic se reevalúa cada vez que se modifican i o count. Por lo tanto, no tiene que saber qué es la cuenta antes de tiempo, ya que solo puede actualizar su valor durante el cálculo. Además, el segundo argumento para Monitor no tiene que ser un ProgressIndicator. Si no conoce el valor máximo que va a utilizar, pero aún desea supervisar la evaluación, podría utilizar algo como Dynamic [i] y se mostrará y actualizará el valor actual de i. – ragfield

6

Ésta es sólo una extensión de la respuesta de @ ragfield.

Si desea representar magnitudes delimitadas y sin límites, que colud hacer algo en este sentido:

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 
]; 

Si desea guardar los indicadores de progreso como un gif animado de presententations y el ejemplo, podría modificar un poco:

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}] 

y el resultado es:

alt text