跳转至内容

MATLAB 编程/图形用户界面

来自 Wikibooks,开放世界中的开放书籍

注意:在 MATLAB R2019b 版本中,MathWorks 宣布将在未来版本中移除用于在 MATLAB 中构建应用程序的 GUIDE 设计环境。请注意,在移除 GUIDE 后,GUIDE 应用程序将继续运行,但将无法使用 GUIDE 环境进行编辑。

什么是 GUIDE?

[编辑 | 编辑源代码]

MATLAB 提供的 GUIDE 工具箱(以其全称图形用户界面开发环境而闻名)允许高级 MATLAB 程序员为其程序提供图形用户界面。GUI 很有用,因为它们使最终用户摆脱了 MATLAB 的命令行界面,并提供了一种在非程序员之间轻松共享代码的方法。

在 MATLAB 中使用 GUIDE 主要有两种工作流程,即

(i) 布局 GUI
(ii) 编写 GUI 程序

从空白 GUI 创建

[编辑 | 编辑源代码]

要开始在 GUIDE 中编程,只需在 MATLAB 中输入以下内容:

guide

它将显示以下图表

MATLAB GUIDE GUI Main Menu
MATLAB GUIDE GUI 主菜单

我们将创建一个使用 GUIDE 工具箱创建的简单 GUI 示例,它接收两个数字的输入并将它们相加,并在第三个文本框中显示结果。它非常简单,但有助于说明这样的 GUI 在几分钟内就创建出来了。


选择空白 GUI(默认)



放置组件并更改属性

[编辑 | 编辑源代码]
Showcasing the MATLAB GUIDE Blank Canvas GUI
展示 MATLAB GUIDE 空白画布 GUI

我们可以看到,在此主菜单的界面中存在网格状结构。此外,我们还可以看到 GUIDE 使用的基本工具在此处显示。在继续之前,以下是工具栏及其功能的简要说明。

组件 描述
按钮 当用户单击鼠标时激活的按钮。
滑块 调整滑块的位置将更改值
单选按钮 可以将其状态从未选中(未激活)更改为选中(激活)并返回的按钮。
复选框 可以将状态从选中(已选中)更改为未选中(未选中)的复选按钮。
编辑文本 允许用户通过在其中键入文本输入信息的文本字段。
静态文本 显示一些文本的标签;用于标记项目或报告计算结果
弹出菜单 提供用户一个选项列表的菜单,从中可以选择一个选项
列表框 显示可以滚动的选项列表的列表。请注意,可以同时选择多个项目
切换按钮 按下后,保持按下状态,直到再次按下
表格 以表格形式显示数据的表格
坐标轴 显示二维和三维绘图图表的区域
面板 在视觉上将控件组合在一起。
按钮组 将一组单选按钮切换按钮组合在一起,以便它们一起工作,结果一次只能选择一个
Active X 控件 不适用
MATLAB GUIDE Property Inspector
MATLAB GUIDE 属性检查器

我们可以将静态文本编辑文本按钮拖放到左图所示的区域中。

如您所见,按钮编辑文本在字段上显示通用“编辑文本”字样和“按钮”字样。
我们可以更改这些文本,如下所示:首先,双击任何编辑文本,它应该弹出名为检查器的窗口,该窗口显示在右侧图片中。
向下滚动直到找到字符串属性,然后删除其中的文本,右侧的编辑文本现在应该为空。

对于按钮,重复相同的步骤:双击按钮,然后向下滚动直到字符串属性,并将字样更改为添加

使用句柄进行编程

[编辑 | 编辑源代码]

我们已经完成了 GUI 的基本布局。

我们只需要逻辑地思考我们要做什么

1. 从其属性获取Num_A文本字段的新值。Num_B也是如此
2. 将两个数字相加
3. 设置标签totalAdd的字符串属性的值

为此,我们需要了解getset命令

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 示例。

更复杂的 GUI

[编辑 | 编辑源代码]
MATLAB GUI Align Objects GUI
MATLAB GUI 对齐对象 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

https://web.archive.org/web/20211021213906/https://www.matlabclass.com/2013/11/study-of-graphical-user-interface-in.html

待办事项

华夏公益教科书