<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi Antoine, et al.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Your reply is very helpful, so I think
      you got the right question :-)</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">1) Good point that I can use callback
      on every uicontrol. This would be suitable for a simple example
      (like gui_example.sce) ... but for heavy calculations, it might be
      more practical with a CALC button. P.S. The correct equation for
      the resonance frequency is <span
        style="font-size:9.0pt;font-family:"Monospaced",serif">fres</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:windowtext">
      </span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#5C5C5C">=</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:windowtext">
      </span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#32B9B9">sqrt</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#4A55DB">(</span><span
        style="font-size:9.0pt;font-family:"Monospaced",serif">k</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:windowtext">
      </span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#5C5C5C">/</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:windowtext">
      </span><span
        style="font-size:9.0pt;font-family:"Monospaced",serif">m</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#4A55DB">)</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#5C5C5C">/</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#4A55DB">(</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:rosybrown">2</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#5C5C5C">*</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:orchid">%pi</span><span
style="font-size:9.0pt;font-family:"Monospaced",serif;color:#4A55DB">)</span><span
        style="font-size:9.0pt;font-family:"Monospaced",serif">;</span></div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">2) I see what you mean, so not having
      an empty space, but "show" the whole she-bang from the beginning.
      I didn't want to do that (just deleting the IF-statement), but it
      could be the best solution in the end (rather than the inline GUI
      updates), if nothing better shows up. This was somehow the "core"
      of my question. Maybe I ask for too much.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">3) I will look into this. Thanks for
      the tip.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">4) I will also look into this. My
      problem is the steep learning curve. If you look at the Scilab
      tutorials you have the good-old Openeering LHY_Tutorial - it's
      incredibly complicated and long. Is LHY_Tutorial using the
      Model-Viewer-Controller approach? - Maybe the
      Model-Viewer-Controller could be presented in a _simple_ tutorial
      - is it possible?</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">I appreciate gui_example.sce with just
      about 70 lines of code, two inputs and one output. I think
      something like it could help a lot of people ... and it's not 250
      lines of code to get a GUI up and running, if you know what I
      mean. The gui_example shows a few differences, like white versus
      grey background, editable boxes, etc. In the outputs, because of
      the default grey background, you can see the dimensions of the
      grid / text-boxes, and gui_example has two buttons. It looks
      operational and easy to expand for new users.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Cheers,</div>
    <div class="moz-cite-prefix">Claus<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">On 28.11.2019 08:57, Antoine Monmayrant
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:42ca-5ddf7e00-1b-369f1700@131521389">
      <pre class="moz-quote-pre" wrap="">Hello Claus,

I've been playing a bit with GUIs for teaching, so maybe I can help.
The issue is that I don't get what your problem is exactly here, so I my answer might be a bit off-topic.
Do not hesitate to rephrase your issue, I'll try a more focused answer.

Anywya, here is how I think your code could be improved:

(1) You can use 'calc' as the callback for all of the editable text field so that your result gets shown right away, without having to press a button.
(2) You should populate all the uicontrols of your gui first, then only update the displayed values, the visibility of the uicontrols, etc inside your calc function. (ie no more creating a uicontrol inside a callback)
(3) The 'tag' property of any uicontrol together with 'findobj()' are really nice to get/set the properties of each existing uicontrol.
(4) You can rely on a proper Model-View-Controler approach (or any other well established method to avoid mixing gui stuff with calculation stuff).

I attached a small gui I use to illustrate optical anti-reflection coating.
It is far from perfect (I did not implement a proper model-view-controler for example).
But you can see how I tried to separate the different parts of the code an how I use findobj/tag/get/set,  etc.

Hope it helps,

Antoine
 
Le Mercredi, Novembre 27, 2019 19:21 CET, Claus Futtrup <a class="moz-txt-link-rfc2396E" href="mailto:cfuttrup@gmail.com"><cfuttrup@gmail.com></a> a écrit: 
 
</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">Hi there

I'm trying to build a GUI. For simplicity on the forum, I've built a 
really simple example of what I'm trying to do. How can I make the 
"conditional" GUI output work and not have it inside the calc function? 
... or, how would you do it? Thanks.

Best regards, Claus.

// GUI_EXAMPLE.SCE
//
// Demo of how to build a simple GUI in Scilab.
// Real simple, with two input variables and one output.
// The example uses the basic mechanical example of a mass and a spring as
// input parameters and calculates the resonance frequency of the mechanical
// system.

// Initialize variables
m  =  1;  // Moving mass 'm'(kilogram)
k  =  1;  // Stiffness, spring constant 'k'(Newton per meter)
fres  =  1;  // Resonance frequency (Hertz)
show_result  =  %f;

function  calc()
     m  =  evstr(get(ge_m,"string"));  // get content in uicontrol ge_m
     k  =  evstr(get(ge_k,"string"));  // get content in uicontrol ge_k
     fres  =  sqrt(m  *  k);
     // putting GUI updates inside the calculation routine is not pretty code.
     uicontrol("style","text","string","Result :","position",  ..
               [10  as(2)-110  80  20]);
     uicontrol("style","text","string",string(fres),  ..
               "position",[100  as(2)-110  80  20]);
     uicontrol("style","text","string","Hz ","position",  ..
               [200  as(2)-110  30  20]);
     show_result  =  %t;
     // update global variables
     [m,k,fres,show_result]=return(m,k,fres,show_result);
endfunction

function  goodbye()
     close(ge);  // Close GUI window
     printf("Resulting fres: %f Hertz\n",fres);
     abort  // Print result in console (e.g. for copy/paste), then kill the app
endfunction

ge  =  scf();  // GUI Example, Initialize and 'set current figure'
as  =  ge.axes_size;  // read size of window, as = [width height]
ge.figure_name  =  "GUI Example";  // Change window header

uicontrol("style","text","string","Moving mass :","position",  ..
           [10  as(2)-35  80  20],"background",[1  1  1]);  // white background
           // position properties has four parameters = x,y,width,height
           // y-position counts from lower left corner, so we subtract from 'as'
ge_m  =  uicontrol("style","edit","string",string(m),  ..
           "position",[100  as(2)-35  80  20]);
uicontrol("style","text","string","kg ","position",  ..
           [200  as(2)-35  30  20],"background",[1  1  1]);

uicontrol("style","text","string","Stiffness :","position",  ..
           [10  as(2)-60  80  20],"background",[1  1  1]);
ge_k  =  uicontrol("style","edit","string",string(k),  ..
           "position",[100  as(2)-60  80  20]);
uicontrol("style","text","string","N/m ","position",  ..
           [200  as(2)-60  30  20],"background",[1  1  1]);

uicontrol("style","pushbutton","string","Calculate",  ..
           "position",[10  as(2)-85  80  20],"callback","calc");

// How do I make this "conditional"output show up in my GUI?
if  show_result  then  // If "Calculate"button was pushed at least once ...
     uicontrol("style","text","string","Result :","position",  ..
               [10  as(2)-110  80  20]);
     uicontrol("style","text","string",string(fres),  ..
               "position",[100  as(2)-110  80  20]);
     uicontrol("style","text","string","Hz ","position",  ..
               [200  as(2)-110  30  20]);
end

uicontrol("style","pushbutton","string","Exit",  ..
           "position",[10  as(2)-135  80  20],"callback","goodbye");

</pre>
        <br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <pre class="moz-quote-pre" wrap="">_______________________________________________
users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:users@lists.scilab.org">users@lists.scilab.org</a>
<a class="moz-txt-link-freetext" href="http://lists.scilab.org/mailman/listinfo/users">http://lists.scilab.org/mailman/listinfo/users</a>
</pre>
      </blockquote>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>