yacika
yacika

Reputation: 11

How to pass the numerical values inputted from a GUI to a .m file?

I'm trying to write a code in my .m/ GUI file that can pass a certain value obtained from an "edit text" field (called "edit 1") in GUI when I press a push button - to a .m file. Say in the GUI I have this: GUI example What I want to do is to get the value inputted on the "fc'" and "slump" field and use it in a mathematical operation in a .m file. In the GUI, I've written the code to run my m file below the "calculate" pushbutton callback, and in my .m file, I've written:

value = str2num(get(handles.edit1,'String'));

In return, I get Undefined variable "handles" or class "handles.edit1" when I run the UI. What should I write in my .m file or perhaps the GUI editor to obtain the values?

Any solutions/ help would be very much appreciated. Thanks!

Upvotes: 0

Views: 290

Answers (1)

MichaelTr7
MichaelTr7

Reputation: 4767

Programmatically Creating GUI and Callback Functions

Not sure how open you are to doing it programmatically but here is a setup that grabs the values of the fields and uses them in a callback function called Calculate(). Another callback function that clears the field is called Reset(). Below is the GUI and the inputs of the callback functions printed in the command window:

Programatically Creating GUI

The callback function is triggered when the buttons are pressed indicated by the .ButtonPushedFcn property being set to the corresponding function that needs to run.

Full Script:

%******************************************************%
%GUI ELEMENT SETUP/PROPERTIES%
%******************************************************%

%App figure properties%
App = uifigure();
App.Name = "GUI";
X_Position = 200;
Y_Position = 200;
Height = 300;
Width = 600;
App.Position = [X_Position Y_Position Width Height];

%Requirements sub-panel properties% 
Input_Panel = uipanel('Parent',App);
Input_Panel.Title = "Requirements";
Input_Panel.TitlePosition = 'centertop';
Input_Panel.FontWeight = 'bold';
X_Position = 50;
Y_Position = 75;
Height = 120;
Width = 250;
Input_Panel.Position = [X_Position Y_Position Width Height];

%Button label 1 properties%
Label_1 = uilabel('Parent',Input_Panel);
X_Position = 15;
Y_Position = 20;
Height = 30;
Width = 60;
Label_1.Position = [X_Position Y_Position Width Height];
Red = 0.2; Green = 0.2; Blue = 0.2;
Label_1.BackgroundColor = [Red Green Blue];
Label_1.FontColor = "white";
Label_1.HorizontalAlignment = "center";
Label_1.Text = "Slump'";

%Button label 2 properties%
Label_2 = uilabel('Parent',Input_Panel);
X_Position = 15;
Y_Position = 60;
Height = 30;
Width = 60;
Label_2.Position = [X_Position Y_Position Width Height];
Red = 0.2; Green = 0.2; Blue = 0.2;
Label_2.BackgroundColor = [Red Green Blue];
Label_2.FontColor = "white";
Label_2.HorizontalAlignment = "center";
Label_2.Text = "fc'";

%FC field properties%
FC_Field = uieditfield('Parent',Input_Panel);
X_Position = 100;
Y_Position = 60;
Height = 30;
Width = 90;
FC_Field.Position = [X_Position Y_Position Width Height];

%Slump field properties%
Slump_Field = uieditfield('Parent',Input_Panel);
X_Position = 100;
Y_Position = 20;
Height = 30;
Width = 90;
Slump_Field.Position = [X_Position Y_Position Width Height];

%Mpa label properties%
Mpa_Label = uilabel('Parent',Input_Panel);
X_Position = 200;
Y_Position = 60;
Height = 30;
Width = 80;
Mpa_Label.Position = [X_Position Y_Position Width Height];
Mpa_Label.Text = "MPa";

%Cm label properties%
Cm_Label = uilabel('Parent',Input_Panel);
X_Position = 200;
Y_Position = 20;
Height = 30;
Width = 80;
Cm_Label.Position = [X_Position Y_Position Width Height];
Cm_Label.Text = "cm";

%Calculate button properties%
Calculate_Button = uibutton('Parent',App);
X_Position = 400;
Y_Position = 150;
Height = 40;
Width = 160;
Calculate_Button.Position = [X_Position Y_Position Width Height];
Calculate_Button.Text = "Calculate";
Red = 0.7; Green = 0.7; Blue = 0.7;
Calculate_Button.BackgroundColor = [Red Green Blue];

%Reset button properties%
Reset_Button = uibutton('Parent',App);
X_Position = 420;
Y_Position = 105;
Height = 35;
Width = 120;
Reset_Button.Position = [X_Position Y_Position Width Height];
Reset_Button.Text = "Reset";
Reset_Button.FontWeight = 'bold';
Reset_Button.FontSize = 20;
Red = 0.7; Green = 0.7; Blue = 0.7;
Reset_Button.BackgroundColor = [Red Green Blue];

%Callback function configurations%
Calculate_Button.ButtonPushedFcn = @(Calculate_Button,event) Calculate(FC_Field,Slump_Field);
Reset_Button.ButtonPushedFcn = @(Calculate_Button,event) Reset(FC_Field,Slump_Field);

%******************************************************%
%CALLBACK FUNCTION DEFINITIONS%
%******************************************************%

%Calculate callback function definition%
function [] = Calculate(FC_Field,Slump_Field)

fprintf("Calculating Using:\n");
fprintf("fc': %f\n",str2num(FC_Field.Value));
fprintf("Slump: %f\n",str2num(Slump_Field.Value));

end

%Reset callback function definition%
function [] = Reset(FC_Field,Slump_Field)
fprintf("Resetting/clearing fields\n");
FC_Field.Value = "";
Slump_Field.Value = "";
    
end

Ran using MATLAB R2019b

Upvotes: 1

Related Questions