2010-12-09 44 views
6

lors du calcul Je mettrais à jour la valeur de la barre de progression pour notifier à l'utilisateur la progression du calcul.Mise à jour d'une barre de progression dans mathematica

Malheureusement, je ne suis pas en mesure de le faire parce que quand je l'appelle la fonction SetPropertyValue

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

la valeur est mise à jour.

j'obtenir ref cette manière

ref = GUIRun[mainWindow]; 

Répondre

1

Est-ce que vous vous souvenez d'exécuter

Needs["GUIKit`"]; 

avant de commencer à utiliser le GUIKit? Si ce n'est pas le cas, vos commandes ne seront pas exécutées, car elles ne sont pas connues. Si vous chargez le GUIKit après l'avoir utilisé, n'oubliez pas que certains de ses symboles peuvent être masqués par les symboles que vous avez définis par inadvertance.

+0

Merci, je l'ai déjà fait. – pAkY88

9

Avec Mathematica 6 ou version ultérieure essayez d'utiliser Moniteur et ProgressIndicator à la place du paquet GUIKit plus:

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

Le problème est que je mettrais à jour l'indicateur de progression dans le calcul, et je ne peux pas prédire le temps de calcul, donc je mettrais à jour dinamiquement l'état de l'indicateur de progression, par exemple lors de certains événements. Comment est-ce que je peux faire ceci? – pAkY88

+0

Je ne suis pas sûr de comprendre complètement votre question de suivi. L'expression i/nombre dans Dynamic est réévaluée chaque fois que i ou count change. Vous n'avez donc pas besoin de savoir quel compte est à l'avance car vous pouvez simplement mettre à jour sa valeur pendant le calcul. De plus, le second argument de Monitor ne doit pas être un ProgressIndicator. Si vous ne connaissez pas la valeur maximale que vous utiliserez, mais que vous souhaitez toujours surveiller l'évaluation, vous pouvez utiliser quelque chose comme Dynamic [i] et la valeur actuelle de i sera affichée et mise à jour. – ragfield

6

Ceci est juste une extension de la réponse de @ ragfield.

Si vous voulez représenter des grandeurs bornés et sans bornes, vous colud faire quelque chose le long de ces lignes:

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 vous souhaitez enregistrer les indicateurs de progrès au format GIF animé pour presententations et tel, vous pouvez modifier un peu:

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

et le résultat est:

alt text