Working with push buttons in Matlab GUIs

  • Context: MATLAB 
  • Thread starter Thread starter ekrum
  • Start date Start date
  • Tags Tags
    Matlab Push
Click For Summary
SUMMARY

The discussion focuses on creating a MATLAB GUI with two push buttons that respond to user input sequentially. The user is experiencing an issue where pressing the "yes" button executes all commands instead of isolating each button's function. The solution involves structuring the button callbacks to ensure that each press triggers a specific response, utilizing the AlcoholicTool GUI and the AlcoholicF function to manage the flow of questions and answers effectively.

PREREQUISITES
  • Familiarity with MATLAB GUI development using GUIDE
  • Understanding of MATLAB callback functions
  • Knowledge of MATLAB's event-driven programming model
  • Basic proficiency in MATLAB scripting and function creation
NEXT STEPS
  • Explore MATLAB GUIDE for advanced GUI design techniques
  • Learn about MATLAB's event handling and callback mechanisms
  • Investigate state management in MATLAB GUIs to maintain user context
  • Study best practices for structuring MATLAB functions for modularity
USEFUL FOR

MATLAB developers, GUI designers, and anyone interested in enhancing user interaction within MATLAB applications.

ekrum
Messages
2
Reaction score
0
I am trying to create a simple GUI in Matlab with two push buttons and two static text boxes. The basic premise is that a question will pop up and the user can press either the "yes" or "no" push button, resulting in either another question or an answer (in the second text box).

My current problem is that whenever I press "yes," Matlab executes every single command I have written for when the button is pressed. I want to be able to press the button, have a prompt come up, press the button again, have a new prompt come up, etc.

So basically, how can I make Matlab follow the user's steps with time, responding to their push differently every time they press the button?
 
Physics news on Phys.org
each button function should be isolated as a function in the MATLAB m file. Maybe you should post your code. Did you use GUIDE? Try typing guide at the command prompt.
 
This is my code for the gui:

function varargout = AlcoholicTool(varargin)
% ALCOHOLICTOOL MATLAB code for AlcoholicTool.fig
% ALCOHOLICTOOL, by itself, creates a new ALCOHOLICTOOL or raises the existing
% singleton*.
%
% H = ALCOHOLICTOOL returns the handle to a new ALCOHOLICTOOL or the handle to
% the existing singleton*.
%
% ALCOHOLICTOOL('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in ALCOHOLICTOOL.M with the given input arguments.
%
% ALCOHOLICTOOL('Property','Value',...) creates a new ALCOHOLICTOOL or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before AlcoholicTool_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to AlcoholicTool_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help AlcoholicTool

% Last Modified by GUIDE v2.5 14-Apr-2012 20:54:37

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @AlcoholicTool_OpeningFcn, ...
'gui_OutputFcn', @AlcoholicTool_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before AlcoholicTool is made visible.
function AlcoholicTool_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to AlcoholicTool (see VARARGIN)

% Choose default command line output for AlcoholicTool
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes AlcoholicTool wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = AlcoholicTool_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in noButton.
function noButton_Callback(hObject, eventdata, handles)
% hObject handle to noButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
AlcoholicF(handles, 2);


% --- Executes on button press in yesButton.
function yesButton_Callback(hObject, eventdata, handles)
% hObject handle to yesButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
AlcoholicF(handles, 1);

And my code for the script:


function AlcoholicF(handles, iChoose)

% Game to determine whether or not you should drink tonight

set(handles.questionText, 'String', 'Are you trying to decide if you should drink tonight?');
set(handles.answerText, 'String', ' ');

switch iChoose
case 1
set(handles.questionText, 'String', 'Did you have an exam today?')
iChoose=0;
case 2
set(handles.questionText, 'String', 'Then why are you asking me?')
pause(1);
close('AlcoholicTool');
end

switch iChoose
case 1
set(handles.answerText, 'String', 'Then go drink!')
case 2
set(handles.questionText, 'String', 'Did you have a rough week?')
end

Basically I want to be able to press the button and have things happen sequentially instead of getting the same result every time.
 

Similar threads

  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
Replies
1
Views
7K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
21K
  • · Replies 2 ·
Replies
2
Views
6K
  • · Replies 3 ·
Replies
3
Views
13K
  • · Replies 4 ·
Replies
4
Views
7K
  • · Replies 1 ·
Replies
1
Views
3K
Replies
1
Views
2K