7
$\begingroup$

I have a DynamicModule in which I which I wish to start an operation (actually import files) with a button. I would like to monitor the progress with a ProgressIndicator but can't get it to work. This simple example works:

Monitor[
Table[Pause[0.1]; n, {n, 1, 100}],
Dynamic[ProgressIndicator[n, {1, 100}]]
];

I find it interesting that it works even with the final semi-colon. In a DynamicModule this also works:

ClearAll[test];
test[] := DynamicModule[{},
 Row[{Monitor[
   Table[Pause[0.1]; n, {n, 1, 100}],
  Dynamic[ProgressIndicator[n, {1, 100}]]
  ];}]
  ]

test[]

Now I try to put in a button to start and I am lost

ClearAll[test1];
test1[] := DynamicModule[{},
  Row[{Button["Start", Monitor[
   Table[Pause[0.1]; n, {n, 1, 100}],
   Dynamic[ProgressIndicator[n, {1, 100}]]
   ];]}]
  ]   

test1[]

I have tried several alternatives with no success. I would like the progress indicator to appear in the same row as the button once it has been pressed.

$\endgroup$
  • $\begingroup$ I do not understand what you are doing, but try Method -> "Queued" on the Button and see if this helps $\endgroup$ – Nasser Mar 17 '15 at 11:25
7
$\begingroup$

With small modifications of the code provided by m_goldberg you can get the Button and the ProgressIndicator in the same Row. However, it is always there now and will not appear and disappear.

DynamicModule[{n = 1}, 
 Row[{Button["Start", n = 1;
  Do[Pause[0.1]; ++n, {i, 1, 100}], Method -> "Queued"], Spacer[23],
  Dynamic[ProgressIndicator[n, {1, 100}]]}]]

output

In order to get an appearing and disappearing ProgressIndicator you can use

DynamicModule[{n = 0}, 
  Row[{Button["Start", n = 1;
    Do[Pause[0.1]; ++n, {i, 1, 100}], Method -> "Queued"], Spacer[23],
    Dynamic@If[n == 0 || n == 101, "", ProgressIndicator[n, {1, 100}]]}]]

gif

$\endgroup$
  • $\begingroup$ Many thanks for this it works well. Most helpful. $\endgroup$ – Hugh Mar 18 '15 at 10:36
4
$\begingroup$

The closest I can get to what you ask for is

DynamicModule[{n},
  Button["Start",
    n = 0;
    Monitor[Do[Pause[0.1]; ++n, {i, 1, 100}], 
      Dynamic[ProgressIndicator[n, {1, 100}]]],
    Method -> "Queued"]]

which, after the button is clicked on, produces

progress

The progress indicator appears in its own temporary cell, not in a row with the button. This is how Monitor behaves, and I don't know how to change that behavior.

$\endgroup$
  • $\begingroup$ Thanks -it works. As you say it appears in a temporary cell. Perhaps I will have to give up my hope of having it in the same row as the button. However significant progress from where I was which is good. $\endgroup$ – Hugh Mar 17 '15 at 14:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.