创建 MATLAB 用户图形界面必须由三个基本元素:
1.组件在 MATLAB GUI
中的每一个项目(按钮,标签,编辑框等)都是一个图形化组件组件可分为三类:图形化控件(按钮,编辑框,列表,滑动条等),静态元素(窗口和文本字符串),菜单和坐标系,图形化控件和静态元素由函数
uicontrol创建,菜单由函数uimenu 和 uicontextmenu创建,坐标系经常用于显示图形化数据,由函数 axes
创建。2.图象窗口 GUI
的每一个组件都必须安排图象窗口中。以前,我们在画数据图象时,图象窗口会被自动创建。但我们还可以用函数 figure
来创建空图象窗口,空图象窗口经常用于放置各种类型的组件。
3.响应最后,如果用户用鼠标单击或用键盘键入一些信息,那么程序就要有相应的动作。鼠标单击或键入信息是一个事件,如果 MATLAB
程序运行相应的函数,那么MATLAB 函数肯定会有所反应。例如,如果用户单击一按钮,这个事件必然导致相应的MATLAB
语句执行。这些相应的语句被称为响应。只要执行 GUI 的单个图形组件,必须有一个响应。
用工具 guide 来创建MATLAB 用户图形界面,guide是 GUI
集成开发环境。此工具允许程序员安排用读图形界面,选择和放置所需的 GUI
组件。一旦这些组件放置成功,程序员就能够编辑它们的属性:名字,颜色,大小,字体,所要显示的文本等等。当
guide保存了这个用户图形界面之后它将会自动创建一个包括有骨干函数的工作程序,程序员可以利用这些程序执行用户图形界面的执行动
调用 MATLAB 工具 guide
对图象中的控件进行布局。图象窗口的大小,排列和其中的控件布局都可以利用它进行控制。
3.我们可以用 MATLAB 属性编辑器(property inspector)(内置于
guide)给每一个控件起一个名字(标签),还可以设置每一个控件的其他特性,例如颜色,显示的文本等等。
4.把图象保存到一个文件中。当文件被保存后,程序将会产生两个文件,文件名相同而扩展名相同。fig
文件包括你创建的用户图形界面,M 文件包含加载这个图象的代码和每个 GUI 元素的主要响应。
5.编写代码,执行与每一个回叫函数相关的行为。
作为这些步骤的一个简单例子,让我们考虑一个简单的用户图形界面,它包括一个按钮和一个文本框。每单击一次按钮,文本字符串就更新一次,它用于显示用户图形界面启动后的单击总数。
首先,我们必须设置布局的大小,它将生成最终用户图形界面的大小。我们可以通过拖动窗口右下角的小正方形调节布局区的大小和形状。然后点击“push
botton”按钮然后拖动在布局区创建一个按钮。最后单击“text”按钮,然后拖动在布局区创建一个文本字符串。这些步骤产生的结果如图
10.4 所示。如果我们想让两个控件对齐的话,那么可以用对齐工具(Alignment Tool)达到此目的。
第三步:为了设置按钮的属性,右击按钮并选择“Inspect Properties”(编辑属性 )。属性编辑窗口如图 10.5
所示。注意这个属性编辑器列出这个按钮的所有可以得到的属性,并允许我们改变用户图形界面的属性值。属性编辑器运行得到的结果和第九章中介绍
get 和set 函数得到的结果相同,但是属性编辑器是一种非常容易使用的形式。
function MyFirstButton_Callback(hObject, eventdata, handles)
% hObjecthandle to MyFirstButton (see GCBO)
% eventdatareserved - to be defined in a future
version of MATLAB
% handlesstructure with handles and user data (see GUIDATA)
% Declare and initialize variable to store the count
persistent count
if isempty(count)
count =
0;
end
% Update count
count = count + 1;
% Create new string
str = sprintf('Total Clicks: %d',count);
% Update the text field
set (handles.MyFirstText,'String',str);
下面的两个语句创建了一个结构,这个结构的元素为当前窗口中所有对象的句柄,这
两个语句把这个结构当作应用程序数据来存储。
handles = guihandles(fig);
guidata(fig, handles);函数 guihandles
创建了一个结构,这个结构的元素为指定窗口中所有对象的句柄。结
构的每一个元素的名字与组件的 Tag 属性相同,它的值就是每一个组件的句柄。例如在
MyFirstGUI 中返回的句柄结构为
>> handles = guihandles(fig)
handles =figure1: 99.0005
MyFirstText: 3.0021
MyFirstButton: 100.0007