MATLAB中如何跨.m文件调用UI组件创建函数?
解决MATLAB拆分UI初始化代码时的按钮创建错误
错误原因
- 方法调用方式错误:
buttonCreate是buttons类的成员方法,不能直接用initialize类的实例去调用,必须先实例化buttons类,再通过该实例调用方法。 - 局部变量未绑定到实例:
initialize里创建的fig和gridLayout是局部变量,没有赋值给app的属性,导致buttonCreate里访问app.gridLayout时找不到对象。
修正后的代码
initialize.m
classdef initialize < handle properties fig gridLayout axes fileload1 buttonHandler % 用来存储buttons类的实例 end methods function init(app) % 创建主窗口,绑定到app实例 app.fig = uifigure; app.fig.Position = [100 100 1920 1080]; movegui(app.fig,'center'); app.fig.Name = "Audio Editor"; % 创建网格布局,绑定到app实例 app.gridLayout = uigridlayout(app.fig); app.gridLayout.ColumnWidth = repmat({'1x'},1,10); app.gridLayout.RowHeight = repmat({'1x'},1,21); % 实例化buttons类并调用创建方法 app.buttonHandler = buttons(); app.buttonHandler.buttonCreate(app); end end methods function app = initialize init(app) end function delete(app) delete(app.fig); end end end
buttons.m
classdef buttons < handle methods function buttonCreate(obj, app) % 创建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'; % 其他按钮创建代码可继续写在这里 end end end
关键修改点
- 把
fig、gridLayout从局部变量改成app.fig、app.gridLayout,让这些UI容器能被外部方法访问。 - 在
initialize类中新增buttonHandler属性,实例化buttons类后,通过该实例调用buttonCreate,并把initialize的实例app传进去,这样buttonCreate就能操作app的属性和UI组件。 - 运行时直接执行
app = initialize;就能正常创建带按钮的界面。
内容的提问来源于stack exchange,提问作者user28134562
相关产品推荐
相关产品推荐

