MATLAB 编程/图形用户界面
注意:在 MATLAB R2019b 版本中,MathWorks 宣布将在未来版本中移除用于在 MATLAB 中构建应用程序的 GUIDE 设计环境。请注意,在移除 GUIDE 后,GUIDE 应用程序将继续运行,但将无法使用 GUIDE 环境进行编辑。
MATLAB 提供的 GUIDE 工具箱(以其全称图形用户界面开发环境而闻名)允许高级 MATLAB 程序员为其程序提供图形用户界面。GUI 很有用,因为它们使最终用户摆脱了 MATLAB 的命令行界面,并提供了一种在非程序员之间轻松共享代码的方法。
在 MATLAB 中使用 GUIDE 主要有两种工作流程,即
(i) 布局 GUI
(ii) 编写 GUI 程序
要开始在 GUIDE 中编程,只需在 MATLAB 中输入以下内容:
guide
它将显示以下图表
我们将创建一个使用 GUIDE 工具箱创建的简单 GUI 示例,它接收两个数字的输入并将它们相加,并在第三个文本框中显示结果。它非常简单,但有助于说明这样的 GUI 在几分钟内就创建出来了。
选择空白 GUI(默认)
我们可以看到,在此主菜单的界面中存在网格状结构。此外,我们还可以看到 GUIDE 使用的基本工具在此处显示。在继续之前,以下是工具栏及其功能的简要说明。
组件 | 描述 |
---|---|
按钮 | 当用户单击鼠标时激活的按钮。 |
滑块 | 调整滑块的位置将更改值 |
单选按钮 | 可以将其状态从未选中(未激活)更改为选中(激活)并返回的按钮。 |
复选框 | 可以将状态从选中(已选中)更改为未选中(未选中)的复选按钮。 |
编辑文本 | 允许用户通过在其中键入文本输入信息的文本字段。 |
静态文本 | 显示一些文本的标签;用于标记项目或报告计算结果 |
弹出菜单 | 提供用户一个选项列表的菜单,从中可以选择一个选项 |
列表框 | 显示可以滚动的选项列表的列表。请注意,可以同时选择多个项目 |
切换按钮 | 按下后,保持按下状态,直到再次按下 |
表格 | 以表格形式显示数据的表格 |
坐标轴 | 显示二维和三维绘图图表的区域 |
面板 | 在视觉上将控件组合在一起。 |
按钮组 | 将一组单选按钮或切换按钮组合在一起,以便它们一起工作,结果一次只能选择一个 |
Active X 控件 | 不适用 |
我们可以将静态文本、编辑文本和按钮拖放到左图所示的区域中。
如您所见,按钮和编辑文本在字段上显示通用“编辑文本”字样和“按钮”字样。
我们可以更改这些文本,如下所示:首先,双击任何编辑文本,它应该弹出名为检查器的窗口,该窗口显示在右侧图片中。
向下滚动直到找到字符串属性,然后删除其中的文本,右侧的编辑文本现在应该为空。
对于按钮,重复相同的步骤:双击按钮,然后向下滚动直到字符串属性,并将字样更改为添加
我们已经完成了 GUI 的基本布局。
我们只需要逻辑地思考我们要做什么
1. 从其值属性获取Num_A文本字段的新值。Num_B也是如此
2. 将两个数字相加
3. 设置标签totalAdd的字符串属性的值
为此,我们需要了解get和set命令
get命令获取组件标签名称的当前字符串属性。
var = get(handles.Tag Name , values)
set命令使用更新的值替换组件的字符串属性。
var = set(handles.Tag Name , values)
回调函数是在用户通过单击按钮、按下键盘上的键或选择菜单项来启动操作时执行的函数。因此,编写回调函数是编写 GUI 的最重要部分。例如,在上面说明的 GUI 中,我们需要为按钮添加编写回调函数。这在代码中作为回调函数提供。当您将组件添加到 GUI 布局时,GUIDE 会为其 Tag 属性分配一个值,然后使用该值生成回调函数的名称。
以下提供了代码,并说明了如何编写简单的回调函数
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n1 = get(handles.edit1,'string'); % get the values from the edit text 1
n2 = get(handles.edit2,'string'); % get the values from the edit text 2
S = str2double(n1) + str2double(n2); % performing addition
set(handles.edit3,'string',num2str(S)) % set the number of addition result to edit text 3
在这段代码中,我从编辑框中获取数字作为字符串,然后使用 MATLAB 提供的 str2double 函数将其转换为数字。
然后,我将另一个编辑框的字符串设置为这两个数字的总和。这完成了需要添加两个数字的简单 GUI 示例。
为了使计算器比简单的加法更复杂,我们可以创建一个更完整的计算器,它可以处理减法、乘法和除法。为此,请添加 3 个按钮。双击每个按钮以将字符串更改为相关的函数,例如 SUB 用于减法函数,依此类推。
同时,将标签更改为更易识别的标签名称,例如sub_button。在使用回调函数进行编程后,它将更易于识别和编辑。
您可以添加静态名称来标记编辑文本,但对于此练习,这是可选的。
如您所见,GUI 杂乱无章,但有一个工具可以用来整理混乱。
您可以使用对齐对象工具(右侧图片所示)按正确的顺序对齐按钮。
将两个编辑文本水平对齐,然后将 4 个按钮水平对齐。
对齐正确后,它将如下面的图片所示。您可以将其与上面的图片进行比较,该图片在之前看起来很凌乱。
我们可以继续执行下一步进行编程,这看起来更容易,因为我们已经为添加按钮完成了它
要对每个单独的按钮进行编程,请右键单击每个按钮并选择编辑器,然后在其中键入代码。
如您所见,描述每个按钮的标签而不是通用名称按钮 1等非常有用……
% --- Executes on button press in sub_button.
function sub_button_Callback(hObject, eventdata, handles)
% hObject handle to sub_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n1 = get(handles.edit1,'string');
n2 = get(handles.edit2,'string');
S = str2double(n1) - str2double(n2);
set(handles.edit3,'String',num2str(S))
% --- Executes on button press in mul_button.
function mul_button_Callback(hObject, eventdata, handles)
% hObject handle to mul_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n1 = get(handles.edit1,'string');
n2 = get(handles.edit2,'string');
S = str2double(n1) * str2double(n2);
set(handles.edit3,'String',num2str(S))
% --- Executes on button press in div_button.
function div_button_Callback(hObject, eventdata, handles)
% hObject handle to div_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n1 = get(handles.edit1,'string');
n2 = get(handles.edit2,'string');
S = str2double(n1) / str2double(n2);
set(handles.edit3,'String',num2str(S))
您完成了,您已在 MATLAB 中创建了一个简单的可工作计算器。
为了说明更复杂的示例,我们将展示如何绘制简单的抛射体运动,并且您可以更改函数的参数。只要稍加想象,您就可以使其绘制您输入的任何任意函数。
https://web.archive.org/web/20221003005946/https://www.mathworks.com/help/matlab/ref/guide.html
待办事项