Making universal variables in MATLAB GUI

前端 未结 2 526
不知归路
不知归路 2021-01-26 16:27

I\'m kind of new to MATLAB and I\'m doing some experiments for a school project.

What I want is a GUI with 3 buttons, when you press either of the first two, it adds up

相关标签:
2条回答
  • 2021-01-26 17:22

    You have several options:

    1. use global variables as nhowe suggested.
      But using global variables is not a good practice: see Top 10 MATLAB code practices that make me cry, or Wikipedia article
    2. use setappdata / getappdata functions to store your variables (this is the simpler one)
    3. learn how to use and properly update the handles structure that appears in each callback function for GUI controls created in GUIDE (this one is more complicated).

    Here is an example of *.m file for case #3. Most of GUIDE-generated code was removed showing only things related to your variables. Basically, you have to update the handles structure in each callback function that does some changes to it with guidata(hObject, handles); line. After this all subsequent callbacks will see the updated handles structure.

    function varargout = GUIProgramWithVariables(varargin)
        % Here goes some comment from GUIDE
        % Begin initialization code - DO NOT EDIT
        % . . .             actual code skipped
        % End initialization code - DO NOT EDIT
    
    % --- Executes just before GUIProgramWithVariables is made visible.
    function GUIProgramWithVariables_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 GUIProgramWithVariables (see VARARGIN)
        % Choose default command line output for GUIProgramWithVariables
        handles.output = hObject;
        % Here your code starts. It should be at the end of OpeningFcn
        % Add your fields to handles structure
        handles.C1 = 1;
        handles.C2 = 2;
        handles.C3 = 3;
        % this updates modified handles structure
        % so all subsequent call-backs will see the changes 
        guidata(hObject, handles); 
    
    % --- Executes on button press in Button1
    function Button1_Callback(hObject, eventdata, handles)
        % hObject    handle to BrowseButton (see GCBO)
        % eventdata  reserved - to be defined in a future version of MATLAB
        % handles    structure with handles and user data (see GUIDATA)
        % Here we do the magic with Button1
        handles.C1 = handles.C1 + 1;
        % this updates modified handles structure
        % so all subsequent call-backs will see the changes 
        guidata(hObject, handles); 
    
    % --- Executes on button press in Button2
    function Button1_Callback(hObject, eventdata, handles)
        % hObject    handle to BrowseButton (see GCBO)
        % eventdata  reserved - to be defined in a future version of MATLAB
        % handles    structure with handles and user data (see GUIDATA)
        % Here we do the magic with Button2
        handles.C2 = handles.C2 + 1;
        % this updates modified handles structure
        % so all subsequent call-backs will see the changes 
        guidata(hObject, handles); 
    
    % --- Executes on button press in Button3
    function Button3_Callback(hObject, eventdata, handles)
        % hObject    handle to BrowseButton (see GCBO)
        % eventdata  reserved - to be defined in a future version of MATLAB
        % handles    structure with handles and user data (see GUIDATA)
        % Here we do the magic with Button3
        handles.C3 = handles.C1 + handles.C2;
        % this updates modified handles structure
        % so all subsequent call-backs will see the changes 
        guidata(hObject, handles); 
    
    0 讨论(0)
  • 2021-01-26 17:31

    The following is not the best practice for large complicated programs, but for something simple like what you're trying to do it sounds like global variables would be perfect. Say that X, Y, and Z are the variables you want to share between functions. Add the following at the beginning of every function that uses them, and they will all have access to the same values.

    global X Y Z
    
    0 讨论(0)
提交回复
热议问题