你是不是也有过这样的经历?用Matlab跑了一堆数据,结果只能在命令行里看冷冰冰的数字,或者画个图还得手动调参数?要是能做个带按钮、滑块、输入框的小工具,让别人点几下就能得到结果,那多酷啊!今天咱们就来聊聊Matlab GUI界面设计——不用学复杂的前端语言,用Matlab自带的工具就能搞定,新手也能快速上手!
在开始之前,得先搞清楚Matlab里做GUI的两个工具:GUIDE和App Designer。GUIDE是老版本的工具,现在Matlab已经不怎么推荐用了,但很多老教程还在用;App Designer是新版的,界面更友好,功能更强大,而且完全可视化设计——所以咱们今天重点讲App Designer,毕竟学新不学旧嘛!
怎么打开App Designer?超简单:
1. 打开Matlab,点击顶部菜单栏的「APP」标签;
2. 在「设计应用」区域找到「App Designer」,点它就行;
3. 或者直接在命令行输入appdesigner,回车——秒开!
第一次打开的时候,你会看到一个分成左右两部分的界面:左边是组件库(各种按钮、文本框、图表都在这里),右边是设计画布(你要搭界面的地方),底部还有属性检查器(调组件样式的地方)。是不是很像搭积木?对,就是这么回事!
咱们先从最简单的例子开始:做一个能算两个数相加的计算器。步骤超详细,跟着做就行!
搭好之后,你可以用鼠标调整每个组件的位置和大小,让界面看起来整齐一点——不用怕歪,App Designer支持对齐辅助线,拖的时候会自动提示对齐,很贴心!
界面搭好了,但按钮点了没反应?因为还没给它写「指令」呢!这时候就要用到回调函数——就是组件被触发(比如按钮被点击)时要执行的代码。
怎么写回调函数?
1. 双击你刚才拖的「计算结果」按钮,Matlab会自动跳转到代码编辑器界面;
2. 你会看到一个自动生成的函数,名字大概是function CalculateResultButtonPushed(app, event)——这就是按钮被点击时要执行的函数;
3. 往这个函数里填代码:matlab
% 获取两个输入框的值
num1 = app.NumericEditField.Value; % 第一个输入框的名字可能是NumericEditField_2,看你拖的顺序
num2 = app.NumericEditField_2.Value;
% 计算结果
result = num1 + num2;
% 把结果显示到文本区域
app.TextArea.Value = string(result);
注意:每个组件的名字都可以改!比如你可以把第一个输入框改名为Num1Edit,这样代码里写app.Num1Edit.Value更清晰——怎么改?选中组件,看底部属性检查器里的「Name」属性,直接改就行!
点顶部菜单栏的「运行」按钮(或者按F5),Matlab会自动生成一个App,你输入两个数,点「计算结果」按钮,结果就出来了!是不是超有成就感?这就是GUI的魅力——把复杂的代码藏在背后,用户只需要点几下就行!
刚才的计算器太简单了,咱们来个稍微复杂点的:做一个能调频率和振幅的正弦曲线生成器。这个例子能用到更多组件,比如滑块、图表,更贴近实际数据分析的需求。
app.FrequencyText.Value = "当前频率:" + string(app.FrequencySlider.Value) + " Hz"; app.AmplitudeText.Value = "当前振幅:" + string(app.AmplitudeSlider.Value); 这样滑块动的时候,旁边的文本就会实时更新,用户能看到当前值,体验更好!
matlab
% 获取滑块的值
freq = app.FrequencySlider.Value;
amp = app.AmplitudeSlider.Value;
% 生成x轴数据
x = 0:0.01:2*pi;
% 计算正弦曲线
y = amp * sin(freq * x);
% 画图:先清空坐标轴,再plot
cla(app.UIAxes); % UIAxes是坐标轴的默认名字,记得改哦
plot(app.UIAxes, x, y, 'LineWidth', 2); % LineWidth设置线粗
% 加标题和标签
title(app.UIAxes, "正弦曲线 y = " + string(amp) + "sin(" + string(freq) + "x)");
xlabel(app.UIAxes, "x");
ylabel(app.UIAxes, "y"); 点运行,调整滑块的频率和振幅,再点生成曲线——哇,坐标轴里立刻画出对应的曲线!是不是超直观?如果要保存图怎么办?可以再拖个按钮写「保存图片」,回调函数里用saveas(app.UIAxes, "sin_curve.png")就能保存了,亲测有效!
做好基础界面还不够,咱们再学几个小技巧,让你的GUI更专业、更好用!
你有没有发现,有时候调整组件大小或者窗口大小,界面会乱掉?这时候网格布局(Grid Layout)就派上用场了!它能让组件像表格一样排列,自动适应窗口大小。
怎么用?
1. 从组件库的「布局」分类里,拖一个「Grid Layout」到设计画布上;
2. 选中Grid Layout,在属性检查器里设置「Rows」和「Columns」(比如3行2列);
3. 然后把组件拖到网格的单元格里——这样每个组件就固定在单元格里,窗口放大缩小也不会乱!
很多软件都有顶部菜单,咱们的GUI也可以加!比如加个「文件」菜单,里面有「保存图片」「退出」选项。
步骤:
1. 从组件库的「图窗」分类里拖一个「Menu」到设计画布的顶部(会自动跑到标题栏下面);
2. 改Menu的文字为「文件」;
3. 再拖一个「MenuItem」到「文件」菜单下面,改文字为「保存图片」;
4. 双击「保存图片」MenuItem,写回调函数:saveas(app.UIAxes, "my_plot.png");
5. 再加个「退出」MenuItem,回调函数写:close(app);
这样用户点菜单就能操作,是不是更像专业软件了?
新手用你的GUI可能会不知道怎么操作,这时候加个提示信息很重要!比如给按钮加个 tooltip(鼠标放上去显示的文字)。
怎么加?选中按钮,在属性检查器里找到「Tooltip」,输入提示文字(比如「点击生成正弦曲线」),这样鼠标放上去就会显示,超贴心!
作为过来人,我得跟你说几个新手容易踩的坑,避免你走弯路:
1. 组件名字别重复:每个组件的Name必须唯一,不然代码里会混淆;
2. 回调函数里要加app.:比如获取输入框的值,必须写app.组件名.Value,不能直接写组件名;
3. 画图要指定Axes:如果有多个Axes,plot的时候一定要指定是哪个(比如plot(app.Axes1, x,y)),不然会画错地方;
4. 数值类型要匹配:比如输入框的值是double类型,文本区域是string类型,要转换一下(用string()或者num2str());
5. 保存App的格式:App Designer生成的App是.mlapp格式,直接保存就行,运行的时候双击.mlapp文件或者在命令行输入App名字就能打开。
Matlab GUI设计其实没那么难,只要你动手做几个小例子,很快就能上手。我第一次做GUI的时候,花了一下午才搞懂回调函数怎么获取组件的值,现在想想真的很简单——关键是要多练!
下次你用Matlab做数据分析的时候,别再只输出冷冰冰的数字了,做个漂亮的GUI工具,让你的成果更直观,也让自己更有成就感!比如你可以做个线性回归分析工具、图像滤波工具,甚至是小游戏(比如猜数字)——只有你想不到,没有Matlab做不到!
好了,今天的分享就到这里。如果有不懂的地方,欢迎在评论区留言(虽然这是博客,但你可以自己在心里模拟一下评论互动哈哈)。祝你早日成为Matlab GUI设计高手!
你是不是也有过这样的经历?用Matlab跑了一堆数据,结果只能在命令行里看冷冰冰的数字,或者画个图还得手动调参数?要是能做个带按钮、滑块、输入框的小工具,让别人点几下就能得到结果,那多酷啊!今天咱们就来聊聊Matlab GUI界面设计——不用学复杂的前端语言,用Matlab自带的工具就能搞定,新手也能快速上手!
在开始之前,得先搞清楚Matlab里做GUI的两个工具:GUIDE和App Designer。GUIDE是老版本的工具,现在Matlab已经不怎么推荐用了,但很多老教程还在用;App Designer是新版的,界面更友好,功能更强大,而且完全可视化设计——所以咱们今天重点讲App Designer,毕竟学新不学旧嘛!
怎么打开App Designer?超简单:
1. 打开Matlab,点击顶部菜单栏的「APP」标签;
2. 在「设计应用」区域找到「App Designer」,点它就行;
3. 或者直接在命令行输入appdesigner,回车——秒开!
第一次打开的时候,你会看到一个分成左右两部分的界面:左边是组件库(各种按钮、文本框、图表都在这里),右边是设计画布(你要搭界面的地方),底部还有属性检查器(调组件样式的地方)。是不是很像搭积木?对,就是这么回事!
咱们先从最简单的例子开始:做一个能算两个数相加的计算器。步骤超详细,跟着做就行!
搭好之后,你可以用鼠标调整每个组件的位置和大小,让界面看起来整齐一点——不用怕歪,App Designer支持对齐辅助线,拖的时候会自动提示对齐,很贴心!
界面搭好了,但按钮点了没反应?因为还没给它写「指令」呢!这时候就要用到回调函数——就是组件被触发(比如按钮被点击)时要执行的代码。
怎么写回调函数?
1. 双击你刚才拖的「计算结果」按钮,Matlab会自动跳转到代码编辑器界面;
2. 你会看到一个自动生成的函数,名字大概是function CalculateResultButtonPushed(app, event)——这就是按钮被点击时要执行的函数;
3. 往这个函数里填代码:matlab
% 获取两个输入框的值
num1 = app.NumericEditField.Value; % 第一个输入框的名字可能是NumericEditField_2,看你拖的顺序
num2 = app.NumericEditField_2.Value;
% 计算结果
result = num1 + num2;
% 把结果显示到文本区域
app.TextArea.Value = string(result);
注意:每个组件的名字都可以改!比如你可以把第一个输入框改名为Num1Edit,这样代码里写app.Num1Edit.Value更清晰——怎么改?选中组件,看底部属性检查器里的「Name」属性,直接改就行!
点顶部菜单栏的「运行」按钮(或者按F5),Matlab会自动生成一个App,你输入两个数,点「计算结果」按钮,结果就出来了!是不是超有成就感?这就是GUI的魅力——把复杂的代码藏在背后,用户只需要点几下就行!
刚才的计算器太简单了,咱们来个稍微复杂点的:做一个能调频率和振幅的正弦曲线生成器。这个例子能用到更多组件,比如滑块、图表,更贴近实际数据分析的需求。
app.FrequencyText.Value = "当前频率:" + string(app.FrequencySlider.Value) + " Hz"; app.AmplitudeText.Value = "当前振幅:" + string(app.AmplitudeSlider.Value); 这样滑块动的时候,旁边的文本就会实时更新,用户能看到当前值,体验更好!
matlab
% 获取滑块的值
freq = app.FrequencySlider.Value;
amp = app.AmplitudeSlider.Value;
% 生成x轴数据
x = 0:0.01:2*pi;
% 计算正弦曲线
y = amp * sin(freq * x);
% 画图:先清空坐标轴,再plot
cla(app.UIAxes); % UIAxes是坐标轴的默认名字,记得改哦
plot(app.UIAxes, x, y, 'LineWidth', 2); % LineWidth设置线粗
% 加标题和标签
title(app.UIAxes, "正弦曲线 y = " + string(amp) + "sin(" + string(freq) + "x)");
xlabel(app.UIAxes, "x");
ylabel(app.UIAxes, "y"); 点运行,调整滑块的频率和振幅,再点生成曲线——哇,坐标轴里立刻画出对应的曲线!是不是超直观?如果要保存图怎么办?可以再拖个按钮写「保存图片」,回调函数里用saveas(app.UIAxes, "sin_curve.png")就能保存了,亲测有效!
做好基础界面还不够,咱们再学几个小技巧,让你的GUI更专业、更好用!
你有没有发现,有时候调整组件大小或者窗口大小,界面会乱掉?这时候网格布局(Grid Layout)就派上用场了!它能让组件像表格一样排列,自动适应窗口大小。
怎么用?
1. 从组件库的「布局」分类里,拖一个「Grid Layout」到设计画布上;
2. 选中Grid Layout,在属性检查器里设置「Rows」和「Columns」(比如3行2列);
3. 然后把组件拖到网格的单元格里——这样每个组件就固定在单元格里,窗口放大缩小也不会乱!
很多软件都有顶部菜单,咱们的GUI也可以加!比如加个「文件」菜单,里面有「保存图片」「退出」选项。
步骤:
1. 从组件库的「图窗」分类里拖一个「Menu」到设计画布的顶部(会自动跑到标题栏下面);
2. 改Menu的文字为「文件」;
3. 再拖一个「MenuItem」到「文件」菜单下面,改文字为「保存图片」;
4. 双击「保存图片」MenuItem,写回调函数:saveas(app.UIAxes, "my_plot.png");
5. 再加个「退出」MenuItem,回调函数写:close(app);
这样用户点菜单就能操作,是不是更像专业软件了?
新手用你的GUI可能会不知道怎么操作,这时候加个提示信息很重要!比如给按钮加个 tooltip(鼠标放上去显示的文字)。
怎么加?选中按钮,在属性检查器里找到「Tooltip」,输入提示文字(比如「点击生成正弦曲线」),这样鼠标放上去就会显示,超贴心!
作为过来人,我得跟你说几个新手容易踩的坑,避免你走弯路:
1. 组件名字别重复:每个组件的Name必须唯一,不然代码里会混淆;
2. 回调函数里要加app.:比如获取输入框的值,必须写app.组件名.Value,不能直接写组件名;
3. 画图要指定Axes:如果有多个Axes,plot的时候一定要指定是哪个(比如plot(app.Axes1, x,y)),不然会画错地方;
4. 数值类型要匹配:比如输入框的值是double类型,文本区域是string类型,要转换一下(用string()或者num2str());
5. 保存App的格式:App Designer生成的App是.mlapp格式,直接保存就行,运行的时候双击.mlapp文件或者在命令行输入App名字就能打开。
Matlab GUI设计其实没那么难,只要你动手做几个小例子,很快就能上手。我第一次做GUI的时候,花了一下午才搞懂回调函数怎么获取组件的值,现在想想真的很简单——关键是要多练!
下次你用Matlab做数据分析的时候,别再只输出冷冰冰的数字了,做个漂亮的GUI工具,让你的成果更直观,也让自己更有成就感!比如你可以做个线性回归分析工具、图像滤波工具,甚至是小游戏(比如猜数字)——只有你想不到,没有Matlab做不到!
希望这篇文章能帮到你,要是你在设计过程中遇到问题,别慌,Matlab的帮助文档超详细,搜一下就能找到答案!加油,祝你做出超棒的GUI工具!