MATLAB 图形用户界面构建
摘要:MATLAB编程语言是继FORTRAN后进化而来的更强大方便的图形分析工具。它已经成为工程研究和科学教育方面不可或缺一部分。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C 和FORTRAN)编写的程序。
关键字:MATLAB 图形用户界面
- MATLAB GUI介绍
用户界面是用户与计算机进行信息交流的方式。计算机用户界面在屏幕显示图形和文本,若有扬声器还可产生声音。用户通过输入设备(如:键盘、鼠标、跟踪球、绘制板或麦克风), 与计算机通讯。用户界面设定了如何观看和如何感知计算机、操作系统或应用程序。通常,多是根据悦目的结构和用户界面功能的有效性来选择计算机或程序。
图形用户界面(GUI)是指由窗口、菜单、图标、光标、 图形用户界面按键、对话框和文本等各种图形对象的用户界面。它让图形对象用户定制用户与MATLAB的交互方式,而命令窗口不是唯一与MATLAB的交互方式。
用户通过鼠标或键盘选择、激活这些图形对象,使计算机产生某种动作或变化。 基本图形对象分为控件对象用户界面菜单对象控件对象和用户界面菜单对象控件对象用户界面菜单对象,简称控件菜单和菜单控件。
本章论文的主要目的是描述如何在MATLAB脚本文件下连接程序构建一个图形用户界面(GUI)。该工具可以通过用户改变参数模型方式显示不同的结果。
二、MATLAB GUI图形界面构建
(一)、编写和调试程序,实现计算模型的MATLAB脚本文件。
以简单的电场阻尼指数模型为例:
%% plotDampedEfield
% plot a damped sinusoidal electric field
% with skin depth a
% domain is 0 to 10 microns
%% set parameters
a=3; %skin depth (microns)
E0=12; % magnitude of field at x=0 (V/micron)
Lamabda=1; %period of oscillation (microns)
Xmin=0;
Xmax=10;
Nx=200;
%% initialize arrays
X=linspace(xmin,xmax,Nx);
E=zeros(1.Nx);
%% calculate field
K=2*pi/lambda;
E=E0*cos(k*x).*exp(-x/a);
%% plot results
Plot(x,E);
axis([xmin,xmax,-E0,E0]);
Xlabel(lsquo;x (microns)rsquo;);
Ylabel(lsquo;E(V/micron)rsquo;);
Grid on
该例题只简单专注于过程,而不是物理的结构或算法中涉及的模型。我们选择代表MATLAB函数使用两个向量,x和E、构建数据结构。
该程序主要分为四个部分:
(a)设置输入参数;(b)初始化数组,执行计算;(c)和(d)显示结果。
(二)图形界面结构设计。
图形界面的设计主要包括布局和确定设置哪些变量,如何通过GUI呈现给用户。显示输出结果。
该例题中在第一个代码的可执行部分设置了六个参数:a、E0,lambda、xmin xmax和Nx。这里的参数分成两类:物理参数,E0,lambda;,xmin和计算参数,xmax和Nx。后者改变输出显示,前者反映底层的物理问题。
在这个例子中,我们只显示在其他值不变的情况下通过改变skin depth的值来显示不同的结果。这意味着,我们希望用户能够轻松地更改并看到结果。我们将选择一个常见GUI图形和使用一个与滑动条同步的文本框让用户控制,结果绘制成阻尼正弦图像显示在轴上。
对象命名规则如下:
lt;quantity namegt;lt;ObjectClassgt;
注:“数量名”表达与元素相关联的变量或物理量本身。“对象类”只是一个简称精确的对象。
(三)、创建GUI向导。生成.fig文件和.m文件。
现在我们可以使用向导列出我们需要的图形对象。从面板中拖动对象的位置并根据GUI布局设置大小。最初的布局如下图所示:
1、初始布局阻尼系数向导工具
双击每个对象编辑其属性,为每一个对象用属性检查器设置属性。
(1)编辑按钮和文本框:
·字型大小设置为12;
·单击编辑文本图标附近的字符串属性,并输入:
Skindepth
a (microns)
·调整对象大小;
- 编辑滑动条
·改变标签”depthSlider。”
·最大值改为20;
·修改value值为3。
- 编辑文本框下的滑动条
·修改标签“depthText”;
·字型大小设置为12;
·修改字符串值为3与滑动条的值相匹配;
·调整对象大小。
2、添加一个多行字符串属性标签
- 编辑轴对象
·修改标签”plotAxes。”
(2)编辑函数作为工具的静态文本标题
·设置字形大小为30;
·改变字符串“Damped E-field Tool”;
·调整对象的大小。
(3)编辑工具的静态文本
·改变字符串名称;
·调整对象的大小。
在本例中是至关重要的滑动条以及文本框,轴对象,需编辑好每个对象的属性。
DampedEfieldTool向导将生成图文件,figand.m文件和DampedEfieldTool.m文件,这将自动加载到编辑器中。
(四)、将程序转换为函数,称作“主模型函数”,并从GUI工具代码中调用。
运行的脚本文件加载到MATLAB编辑器并保存在以“F”命名的文件下。在该例题中,该文件被命名为plotDampedEfield,所以它应该保存plotDampedEfieldF文件下。
编辑新文件的第一行,这样它就变成了一个函数声明作为参数处理。
function plotDampedEfieldF(handles)
将变量skin depth赋为值a,该赋值语句为:
a=3;
并设置depthSlider的对象属性,取而代之的是如下命令。
a=get(handles.depthSlider, Value);
这里可以假定滑动条的最新值,输出显示相应的轴对象图形。默认情况下,运行时将直接绘制图形,在绘图命令列表中,大多数plotting-related命令将一个坐标轴对象句柄作为第一个参数。例如,在原始程序命令如下:
plot(x,E);
should be replaced by
plot(handles.plotAxes, x, E);
为简便起见,通常将变量赋值在一个较短的名称上。操作程序如下:
hax=handles.plotAxes;
plot(hax, x, E);
axis(hax, [xmin, xmax, -E0, E0]);
xlabel(hax, x (microns));
ylabel(hax, E(V/micron));
grid(hax, on);
在这个例子中只有一个轴对象,但通常情况下在GUI众会有用的两个或两个以上的轴对象。一个假设的例子context-plotting不同位置在一个坐标轴对象和能源第二轴对象显示如下:
hax=handles.positionAxes;
haxe=handles.energyAxes;
%% plot the position as a function of time on one axes
plot(hax, t, x);
axis(hax, [tmin, tmax, xmin, xmax]);
xlabel(hax, t (seconds));
ylabel(hax, x(m));
%% plot the Energy as a function of time on another axes
plot(haxe, t, E);
axis(haxe, [tmin, tmax, Emin, Emax]);
xlabel(haxe, t (seconds));
ylabel(haxe, E(J));
综上所述我们已经取得了三种类型的变化:(a)从一个脚本变成了一个函数,(b)改变了变量的赋值语句,得到滑动条的值和(c)绘图语句显示轴对象。结果是以下函数;
function plotDampedEfieldF(handles)
% plot a damped sinusoidal electric field
% with skin depth a
% domain is 0 to 10 microns
% Author: T.A. Edison
%% set parameters
% skin depth (microns)
a=get(handles.depthSlider, Value);
E0=12; % magnitude of field at x=0 (V/micron)
lambda=1; % period of oscillation (microns)
xmin=0;
xmax=10;
Nx=200;
%% initialize arrays
x=linspace(xmin, xmax, Nx);
E=zeros(1, Nx);
%% calculate field
k=2*pi/lambda;
E=E0*cos(k*x).*exp(-x/a);
%% plot results
hax=handles.plotAxes;
plot(hax, x, E);
axis(hax, [xmin, xmax, -E0, E0]);
xlabel(hax, x (microns) );
ylabel(hax, E(V/micron) );
grid(hax, on);
(五)、将函数连接到GUI。从GUI工具代码调用添加到主模型和同步GUI对象功能。
主要的GUI工具DampedEfieldTool.m代码文件由向导生成并加载编辑器(如果没有,请在编辑器中打开它)。按下按钮运行程序。这个项目现在需要编辑完成以下三件事:
·将文本框和滑动条相同步
·当用户移动滑动条或更改文本框中的数字时函数图随之改变;
·执行的主要工具是首次运行时模型函数。
在编辑器中检查文件DampedEfieldTool。它包含以下七个功能,其中只有三个需要改变。
function DampedEfieldTool
function DampedEfieldTool_OpeningFcn CHANGE
function DampedEfieldTool_OutputFcn
function depthSlider_Callback CHANGE
function depthSlider_CreateFcn
function depthText_Callback CHANGE
function depthText_CreateFcn
三、回调
(一)、滑动条回调
当用户移动depthSlider并释放它时执行depth-Slider_Callback函数。函数有几个参数,包括handlesstructure,我们将使用与GUI对象通信。由于用户刚刚改变了滑动条的值,这个函数的任务有两个:①更新depthText文本框中显示字符串,②调用主模型函数plotDampedEfieldF。
更新文本框中的字符串是相同的过程,我们添加一个第四步自动调用主模型功能和新的值。
·修改滑动条的值;
·创建相应的字符串;
·然后设置文本框的字符串属性。
·最后,使用新的值执行函数plotDampedEfieldF。
滑动条回调函数如下:
function d
剩余内容已隐藏,支付完成后下载完整资料
英语原文共 13 页,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[286811],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、文献综述、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。