How to create a GUI in matlab where the user can select a single testcase he wants to run?

10 views (last 30 days)
Hello,
I'm trying to create a GUI for Model In loop Regression testing using the Matlab script. Here I have 100 testcases,
I want to select single testcase out of 100 and that selected testcase should run. I want the format to look like below
  1. Testcase 1
(i)TestCase1a
(ii)TestCase2a
2. TestCase 2
(i)TestCase1b
(ii)TestCse2b
etc
Currently, I'm using prompt command to enter the Testcase number I want to run. But I want to improvise this in GUI format which has all the testcases for the user selection.
Any inputs greatly appreciated!
Thank you!
  4 Comments
Voss
Voss on 15 Mar 2024
Edited: Voss on 17 Mar 2024
You're welcome!
Here is a code structure you can use (you should take care that only one node is selected at a time, too):
function TreeSelectionChanged(app, event)
switch app.Tree.SelectedNodes
case app.Sensor1FaultNode % <- the name of Sensor1 Fault Node in your app
TC_RunNum = 10;
case app.Sensor2FaultNode % <- the name of Sensor2 Fault Node in your app
TC_RunNum = 11;
% etc.
end
% then run your script here
end
jenny
jenny on 16 Mar 2024
I have added the switch cases in the mlapp file
I tried to call this mlapp file from .m script by running
run("app1.mlapp");
Looks like it is not running that command and going through the other lines of the .m script. Below is the .m script(just initial couple of lines)
clc;
run("app1.mlapp");
TC_size = size(TC_data);
TC_row = TC_size(1);
TC_len = length(TC_data(:,TC_RunNum).Variables);
After running the above lines, it throughs the below error:
Unrecognized function or variable 'TC_RunNum'.
Error in RunSelectTC (line 40)
TC_len = length(TC_data(:,TC_RunNum).Variables);
I have mentioned the TC_RunNum in the .mlapp file like below
methods (Access = private)
% Selection changed function: Tree
function TreeSelectionChanged(app, event)
switch app.Tree.SelectedNodes
case app.FNRFltNode
TC_RunNum = 25;
case app.StrFltNode %
TC_RunNum = 28;
case app.PrkbrkswfltNode
TC_RunNum = 40;
case app.PBSolfltNode
TC_RunNum = 41;
end
Quesions:
  1. How to call the mlapp file in the .m script? so that user can select the testcase.
  2. The mlapp file which I'm creating is only for the testcase selection. Once the user selects the testcase, it should come back to the .m script. Should I add any logic over here in the mlapp script to go back to .m script? Or something to do add in the m script?
Thank you!!

Sign in to comment.

Accepted Answer

Voss
Voss on 17 Mar 2024
Edited: Voss on 17 Mar 2024
I misunderstood the situation before; I thought you were running a script from an app, not the other way around.
If all you need is a single selection to set a variable in your script, you can run a simple GUI (not an app) from your script. Something like this would work. Here I'm using a popupmenu, but you could use a uitree.
function out = get_case_number()
f = figure( ...
'NumberTitle','off', ...
'IntegerHandle','off', ...
'HandleVisibility','off', ...
'Name','Select Case', ...
'Menubar','none', ...
'Toolbar','none', ...
'Units','pixels', ...
'Position',[300 400 200 140]);
p = uicontrol(f, ...
'Style','popupmenu', ...
'String',{'FNRFlt';'StrFlt';'Prkbrkswflt';'PBSolflt'}, ... % specify the case names
'UserData',[25;28;40;41], ... % and corresponding TC_RunNum value
'Value',1, ...
'Units','pixels', ...
'Position',[20 100 80 22]);
b = uicontrol(f, ...
'Style','pushbutton', ...
'String','Select', ...
'Units','pixels', ...
'Position',[30 20 65 22], ...
'Callback',@cb_button);
out = [];
uiwait(f);
function cb_button(~,~)
UD = get(p,'UserData');
out = UD(get(p,'Value'));
delete(f);
end
end
Then in your script, at the point where the user should make a selection, just say:
TC_RunNum = get_case_number();
and continue with the rest of the script, e.g.:
TC_size = size(TC_data);
TC_row = TC_size(1);
TC_RunNum = get_case_number();
TC_len = length(TC_data(:,TC_RunNum).Variables);
  12 Comments
Voss
Voss on 20 Mar 2024
See the attached modifed m-file.
You need the uiwait in order to be able to return the selected value. But also the button needs a callback, which was missing for uibutton. I put that in place.
Also, Value means different things for a uicontrol button vs a uibutton (as described in the links I posted earlier), so I fixed the button callback to work for a uibutton.
I also repositioned the objects to have a reasonable initial arrangement.
jenny
jenny on 21 Mar 2024
Thank you so much!!
idx = find(strcmp(get(p,'Items'),get(p,'Value')),1);
Sorry, I did not understand 'Value' in the get command

Sign in to comment.

More Answers (0)

Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!