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