How do I access a MATLAB UI function in another .m file?

Illustration
Zucrode - 2024-11-07T12:58:32+00:00
Question: How do I access a MATLAB UI function in another .m file?

I am attempting to declutter my MATLAB app code by separating some of the initialization into separate .m files. For this I have set up various files for each type of component (e.g. a file for buttons, graph, etc.). I am attempting to access a function in my master initialize file from the file for buttons. My code goes as follows in the buttons .m file goes as follow:   classdef buttons < handle methods %initializes the UI function buttonCreate(app) %Create file load 1 app.fileload1 = uibutton(app.gridLayout, 'push'); app.fileload1.FontSize = 36; app.fileload1.Layout.Row = [8 9]; app.fileload1.Layout.Column = 1; app.fileload1.Text = 'Load 1'; %proceeds to create the rest of the buttons end end end Now I attempt to access the buttonCreate() function in my master initialize file initialize.m:   classdef initialize < handle properties fig gridLayout axes fileload1 end methods %initializes the UI function init(app) %create canvas import buttons.*; fig = uifigure; fig.Position = [100 100 1920 1080]; movegui(fig,'center'); fig.Name = "Audio Editor"; %Create grid layout gridLayout = uigridlayout(fig); gridLayout.ColumnWidth = {'1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x'}; gridLayout.RowHeight = {'1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x', '1x'}; buttonCreate(app); end end %code for calling and deleting methods %calls code to create canvas upon app start function app = initialize init(app) end %removes the app and deletes app.fig function delete(app) delete(app.fig); end end end Error in initialize/init (line 41) buttonCreate(app); ^^^^^^^^^^^^^^^^^^ Error in initialize (line 54) init(app) ^^^^^^^^^ This resulted in the UIFigure still being created, but with no button and the terminal giving the error given above.  

Expert Answer

Profile picture of Prashant Kumar Prashant Kumar answered . 2025-11-20

Seems like you're doing some sort of combination of two distinct things:

  1. Use a simple function, which can be in its own .m file or one of the methods of your main class:

 

% in your initialise class constructor you still have
buttonCreate(app);
% In buttonCreate.m
function buttonCreate(app)           
    % Create file load 1
    app.fileload1 = uibutton(app.gridLayout, 'push');
    app.fileload1.FontSize = 36;
    app.fileload1.Layout.Row = [8 9];
    % ...
end
  1. Use a class to hold references to all of your buttons, in which case the objects you create would be properties of that class, rather than the main app object:

 

% in your initialise class constructor you create a buttons
% object and assign it to the buttons property.
% The buttons don't need to know anything about the app, just
% the target grid layout to parent the buttons
app.buttons = buttons( app.gridLayout );
% In buttons.m
classdef buttons < handle
    properties
      fileload1
    end
    methods
        function obj = buttons( grid )           
            % Create file load 1
            obj.fileload1 = uibutton(grid, 'push');
            obj.fileload1.FontSize = 36;
            obj.fileload1.Layout.Row = [8 9];
            % ...
        end
    end
end

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!