Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Working with push buttons in Matlab GUIs

  1. Apr 14, 2012 #1
    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?
     
  2. jcsd
  3. Apr 14, 2012 #2

    Pythagorean

    User Avatar
    Gold Member

    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.
     
  4. Apr 14, 2012 #3
    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Working with push buttons in Matlab GUIs
  1. Help on GUI MATLAB (Replies: 0)

  2. Matlab GUI question (Replies: 2)

Loading...