开始使用Matlab中的图形用户界面
图形用户界面(GUI)是一种图形界面,允许用户在不理解语言的情况下使用一个应用程序。
这是通过提供直观的控制来实现的。控件是用户点击的按钮,以获得确定的输出。GUI是一个事件驱动的程序。这是因为它在任何给定的时间获取输入,并使用回调函数来执行程序并给出结果。
在这篇文章中,我们将看一下用于构建图形用户界面的组件。我们还将研究如何编写组件的回调函数,使其能够执行控件。
Matlab可以生成图形用户界面的代码。这使得它在为工程组件设计图形用户界面时成为更好的工具。
前提条件
- 必须安装[Matlab]。
- 对[Matlab]语言有正确的理解。
如何访问GUI?
你可以通过在工作区键入guide 来访问GUI。

GUI的选择窗口
当Matlab GUI执行这个命令时,会打开一个新的窗口。这个窗口给出了各种GUI模板,用户可以在设计中使用。
在本文中,我们将使用一个空白的GUI模板,因为它将帮助我们应用GUI的基本原理。选择模板后,工作区就打开了。这是我们在为组件编写回调之前实现我们的用户界面的地方。
设计将在画布上使用窗口左侧的对齐的组件来完成。每个组件的名称都是不可见的,除非我们让它可见。
为了使名称可见,我们遵循以下程序。
- 点击文件夹,选择
preferences。

组件和画布
- 选择
show names in the component palette。 - 要激活这些变化,请点击
apply,然后点击OK。

如何使组件的名称可见

这里的组件和它们的名字是可见的
要在工作区添加一个组件,你要选择它并把它放到那里。组件的大小可以通过拖动边缘来改变。改变位置可以通过双击并拖动它来完成。
在使用这些组件之前,让我们看看每一个组件。
Push Button- 它的功能是为不同程序的执行调用回调函数。Slider- 它类似于一个带有数值的滚动条。当用户改变垫子的位置时,回调函数被调用并执行。垫子的位置可以通过拖动垫子到需要的位置或点击前进或后退的箭头来改变。Radio Button- 它有 和 状态。它的状态可以通过点击它来改变。当按钮在空心圆内包含一个实心圆时,那么它就是 。但当空心圆圈为空时,它就是 。它们是分组的,每次只能有一个是 。onoffonoffonCheck Box- 它有 和 状态。 状态由方框内的 表示。它们是分组的,同一时间可以有几个复选框 。onoffontickonEdit Text- 是为了从用户那里获得字符串作为输入。然后可以使用 或 函数将输入修改为数字。str2numstr2doubleStatic Text- 是添加在GUI上保持不变的标签,没有回调。Pop-up Menu- 它是用来列出选择的。你点击它来查看选择,并根据选择执行回调函数。List box- 它像弹出式菜单一样显示一个选择列表。在列表框中,所有的选择都是可见的,不像弹出菜单那样只有当前的选择是可见的。Toggle Button- 它的功能与单选按钮相似,但在GUI中的外观不同。这就是外观上的区别。Table- 它用于将电子表格添加到GUI中。如果输入的内容被修改,回调将被执行。Axes- 用于将图像、图表和绘图添加到GUI中。它们没有回调功能。Panel- 它用于根据功能分组几个组件和名称。它没有回调功能。Button Group- 它就像面板,但用于分组单选按钮。当我们在这里对单选按钮进行分组时。与面板类似,我们首先添加按钮组,然后再添加单选按钮。
GUI实例
我们想创建一个简单的GUI。我们首先添加所需的组件--面板、静态文本、轴、推钮、滑块和编辑文本。
按照前面的解释添加组件,并按照下面的方式排列。

我们的GUI中的组件的安排
然后我们根据需要修改这些组件。当你双击你想修改的组件时,会打开一个新的窗口,如图所示。

组件的修改窗口
我们也可以通过点击位于窗口顶部的属性检查器来实现这一目的。
我们可以根据设计结构来改变组件的背景颜色、前景颜色、字体大小、字体重量、字符串和标签。
在修改字符串组件时,确保其名称是有意义的,这有助于识别.m 文件中的回调。
修改GUI,使其与下图类似。

修改后的新GUI的外观
我们将把Axes 的标签改为axes ,slider1 改为Freq ,edit1 改为Amp 。
注意,静态文本和其他没有回调功能的组件的标签没有必要改变。
在运行前保存GUI。运行GUI后,.m 文件会在.fig 文件出现之前自动生成。

生成的.m文件

获得的.fig文件
在调用create function 之前,首先创建对象并设置属性。
create function 也可以在修改组件时使用,而不是使用属性检查器。这是通过初始化属性来完成的。这很复杂,需要对Matlab有更多的了解,所以我们不会在这个例子中使用它。
这就是我们的GUI的功能。它把滑块的当前值作为频率,得到用户的输入,计算出振幅。
当用户点击刷新按钮时,它执行回调函数并使用获得的数据绘制正弦波。我们将要求刷新和编辑文本的回调函数进行错误检查。错误检查确保用户输入一个数字。
我们首先看一下编辑框的回调函数,这就是我们如何在.m file 中找到它的回调函数。
- 选择该组件。
- 右键单击并选择
view callback。 - 选择
callback,它将自动把你带到那里。
在开始于%str2double 的注释后添加以下代码。
%str2double(get(hObject,'String')) returns contents of Amp as a double
Amp = str2double(get(hObject,'String'));
if isnan(amp) || ~isreal(amp)
% If the `amp` is not a number(nan) and the input should be a number(real)
% the refresh button should be disabled.
set(hObject,'String','Error: Not a number')
set(handles.ref,'Enable','off')
else
set(handles.ref,'Enable','on')
end
我们使用get 函数来获得用户输入。由于编辑文本只接受字符串作为输入,我们用str2double 函数将其转换。然后对输入进行错误检查,如果出现错误,就使用set 函数将编辑框设置为Error: Not a number 。
通过执行set(handles.ref, 'Enable', 'off') ,刷新按钮被停用。如果它是真实的,我们通过执行set(handles.ref, 'Enable', 'on') 来启用刷新按钮。然后它调用回调。
下面是刷新按钮的回调。把这段代码写在以%handles structure 开始的注释下面。
注意,你的代码在回调中的位置不会妨碍代码的执行,因为它们是注释,不会被执行,但会使程序更容易理解。
% handles structure with handles and user data (see GUIDATA)
minFreq = 1;
maxFreq = 10;
% Get parameters from GUI
fs = get(handles.Freq,'Value');
freq = minFreq + fs * (maxFreq - minFreq);
amp = str2double(get(handles.Amp,'String'));
% Calculate data
x = amp * sin(2*pi*freq*t);
% Create time plot in proper axes
plot(handles.axes,t,x)
set(handles.axes,'XMinorTick','on')
grid on
在上面的程序中,我们给出了有助于解释滑块数值的数据,即:minFreq 和maxFreq 。我们给出了有助于绘制正弦波的Y轴的数据,它的定义是:t 。
我们用所有这些数据来得到x ,然后再进行绘图。由于我们希望绘图出现在轴上,所以通过执行这段代码来完成set(handles. axes, ‘XminorTick’, 'on') 。
我们可以输入各种振幅和频率,看到各种图。
下面是一个例子。

当我们运行该程序时得到的图
为了确保我们的错误检查功能正常,我们输入一个字母,在编辑文本框上看到一个错误信息,刷新后变成灰色。这意味着它不会调用回调,直到输入的数字被改为实数。这表明它被停用了。
这在下图中显示。

输入NAN的情况下的输出
总结
Matlab为创建GUI提供了一个良好的环境。这是因为它自动生成了设计图形用户界面的代码。生成的代码还包含注释,使程序员很容易理解代码的内容,并能更好地组织回调函数。
这使程序员的工作变得更容易,并使他/她免于笨重的代码。这使得Matlab成为创建GUI的有效工具。GUI的目的是创建一个人人都能使用的界面。这使得它成为工程师在其项目中实施的重要工具。