完整版matlab电子教案9.docx

上传人:b****3 文档编号:27294614 上传时间:2023-06-28 格式:DOCX 页数:17 大小:87.78KB
下载 相关 举报
完整版matlab电子教案9.docx_第1页
第1页 / 共17页
完整版matlab电子教案9.docx_第2页
第2页 / 共17页
完整版matlab电子教案9.docx_第3页
第3页 / 共17页
完整版matlab电子教案9.docx_第4页
第4页 / 共17页
完整版matlab电子教案9.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

完整版matlab电子教案9.docx

《完整版matlab电子教案9.docx》由会员分享,可在线阅读,更多相关《完整版matlab电子教案9.docx(17页珍藏版)》请在冰豆网上搜索。

完整版matlab电子教案9.docx

完整版matlab电子教案9

4.3用户界面控制对象(Uicontrol)

除了菜单外,控制对象是另一种实现用户与计算机交互的主要手段。

用户界面控制对象(Uicontrol)是这样一类图形界面对象:

用户用鼠标在控制对象上进行操作,单击鼠标时,将会使应用程序作出响应,并执行某些预定的功能子程序(Callback)。

控制对象的结果是可见的,又是可以改变应用程序的初始状态。

4.3.1控制对象的创建

和创建菜单对象类似,同样有两种方式用于创建控制对象:

一是基于函数命令行的编程方式;二是基于GUI的方式。

(1)基于函数命令行的编程方式

使用控制对象函数uicontrol是创建控制对象的基本方法,函数的调用格式为:

h=uicontrol('PropertyName1',value1,'PropertyName2',value2,…)

在当前图形窗口创建一个用户界面控制对象,并返回一个句柄值。

h=uicontrol(hfig,…)

在特定的图形窗口创建一个用户界面控制对象。

其中,h为待制作的用户界面控制对象的句柄,hfig为其父对象句柄,当hfig缺省时,系统将在当前图形界面上添加用户界面控制对象。

(2)基于GUI的方式

如图4.2,打开GUI设计工具集窗口,窗口的左侧便是各种类型的控制对象按钮栏。

单击要添加的控制对象按钮,在图形窗口中拖动鼠标“画出”所需要的位置和大小即可。

4.3.2控制对象的类型和属性

MATLAB提供了11种控制对象,每一种控制对象对应于不同的特定目的。

下面介绍这些控制对象的特征和实现的功能。

●坐标轴(Axis):

设置坐标轴控制对象。

●框架(Frame)——该组件为一封闭的、可见的、图形窗口区域。

框架能使一用户图形界面中相关的控制组件能容易理解。

框架没有相关的回调程序。

只有控制组件能在框架中显示。

框架不是透明的,因此用户定义的组件先后顺序决定了组件是否被框架遮住或可见。

属性Stackingorder决定了控制组件的显示顺序:

第一个定义的组件最先显示,后面定义的控制组件则覆盖已经存在的组件。

若用户要用一框架包围一些组件,则必须第一个定义框架。

●校验框(check)——当单击检验框时,会执行一操作。

该组件对于提供用户多个独立的选择是很有用的。

要激活一校验框,只需用鼠标单击该组件即可,且选中的状态在组件上显示出来。

●可编辑文本框(edit)——允许用户输入与修改文本文字的区域。

当用户想把文字作为输入时,可使用该组件。

若一可编辑文本框有焦点,则单击文本框的菜单栏不会执行任何操作。

因此,在单击菜单条后,语句get(edit_handle,’String’)并没有返回当前编辑框中的内容。

因为系统必须执行回调函数来改变属性string的值,即使屏幕上显示的文字已经改变。

●列表框(list)——显示一些项目的列表(用命令string设置),且允许用户选择一个或多个项目。

属性Min与Max控制着选择的模式。

属性Value显示可选择的项目与包含着字符串列表中项目的索引;对于选择了多个项目则用向量表示。

在任何的能改变属性Value值的、鼠标松开的操作之后,系统MATLAB将马上执行列表框的回调函数。

因此,用户有必要增加一“Done”按钮,用于推迟当要多次选择项目时的操作。

在执行列表框回调函数Callback属性之前,列表框中项目的选择有单击或双击之分,对应于将图形窗口属性SelectionType设置为normal或open。

●弹出菜单(popup)——当组件被按下时,打开且显示一选择列表(用命令string设置)。

当没有打开时,该组件显示当前的选择项。

该组件对于用户想给其他用户提供一系列的互斥的选择项,又不想占用太多的区域。

●普通按钮(push)——当该组件被按下时,将执行一操作。

要激活一按钮,只需在按钮上按下鼠标按钮。

●单选按钮(radio)——该组件与校验框相类似,但它包含几个互斥的、而且相关的选项(例如在任意时刻,只能选择一个状态)。

要激活某一单选按钮,只需在该组件上按下鼠标即可。

被选中的组件同时显示出来。

●滑块(slide)——该组件允许用户通过移动某一范围之内的滑块来输入一指定的数值。

用户要移动一滑块,只需在滑块上按下鼠标不放,且在滑块方向上移动;或者是在滑槽内单击鼠标;或者是单击滑块条上的箭头。

当松开鼠标后,滑块所在位置将与一数值对应。

用户可以设置滑块的最大值、最小值与当前值等。

●静态文本框(text)——显示文本行。

静态文本经常作为其他控制对象标签,以提供其他用户相关信息,或者是显示一滑块的数值。

其他用户不能交互地改变静态文本,因此对于静态文本,没有相关的回调函数。

●触发按钮(toggle)——当该组件被单击且显示出它们的状态(on或者off)时,控制是否执行回调函数。

用法handle=uicontrol(parent)在父对象parent上生成一用户图形控制界面。

用户界面控制对象都是图形窗口的子对象,所以当窗口中没有坐标轴时,同样可以放置控制组件于图形窗口中。

handle=uicontrol(…,'PropertyName',PropertyValue,…)参量PropertyName为属性名,参量PropertyValue可为结构数组或者为单元数组,同时随意地返回刚生成的对象的句柄。

当然用户可以通过命令set与get来设置与询问生成对象的属性值。

表4.4列出了用于命令uicontrol对象的属性名。

每一属性名当作一描述该属性的链接。

表4.4

属性名

属性名含义

属性值

控制控件类型与显示

BackgroundColor

对象的背景颜色

有效值:

ColorSpec

缺省值:

与系统有关

Cdata

显示于对象之上的真颜色图片

有效值:

矩阵

ForegroundColor

文本字体的颜色

有效值:

ColorSpec

缺省值:

[000](黑色)

SelectionHighlight

当对象被选中时突出显示

有效值:

on、off

缺省值:

on

String

用户控制界面的标签,也是列表框与弹出菜单中的项目

有效值:

任意有效的字符串

Visible

用户界面控制是否可见

有效值:

on、off

缺省值:

on

关于控件对象的一般信息

Children

用户界面控制界面没有子对象

Enable

用户界面控制是否可用

有效值:

on、inactive、off

缺省值:

on

Parent

用户界面控制对象的父对象

有效值:

图形窗口标量句柄

Selected

对象是否为选中状态

有效值:

on、off

缺省值:

off

SliderStep

滑块步长尺度

有效值:

二维向量

缺省值:

[0.0010.1]

Style

用户界面控制对象的类型

有效值:

pushbutton、edit、text、togglebutton、slider、radiobutton、popupmenu、listbox、frame

缺省值:

pushbutton

Tag

由用户指定的对象的标记符

有效值:

任意有效字符串

TooltipString

对象的工具提示

有效值:

任意有效字符串

Type

图形对象的类型

有效值:

字符串(只读)

缺省值:

uicontrol

UserData

用户指定的数据

有效值:

矩阵

控制控件对象的位置

Position

用户界面控制对象的大小与位置

有效值:

位置矩形

缺省值:

[20206020]

Units

解释属性position向量的单位

有效值:

pixels、character、normalized、points、centimeters

缺省值:

pixels

控制字体与标签

FontAngle

字符的倾斜度

有效值:

normal、italic、oblique

缺省值:

normal

FontName

字体系列名称

有效值:

字符串

缺省值:

与系统有关

FontSize

字体大小

有效值:

一标量

缺省值:

与系统有关

FontUnits

字体大小单位

有效值:

pixels、normalized、inches、centimeters、points

缺省值:

points

FontWeight

文本字体的磅值

有效值:

light、normal、demi、bold

缺省值:

normal

HorizontalAlignment

标签字符串的对齐方式

有效值:

left、center、left

缺省值:

决定于用户界面控制的对象

String

用户控制界面的标签,也是列表框与弹出菜单中的项目

有效值:

字符串

控制回调函数的执行

BusyAction

回调函数中断方式

有效值:

cancel、queue

缺省值:

queue

ButtonDownFcn

当按钮按下时执行的回调函数

有效值:

字符串

Callback

控制操作

有效值:

字符串

CreateFcn

在对象生成过程中执行的回调函数

有效值:

字符串

DeleteFcn

在对象删除过程中执行的回调函数

有效值:

字符串

Interruptible

回调函数中断的模式

有效值:

on、off

缺省值:

on

UIContextMenu

与界面控制中的对象相关的菜单(如按下鼠标右键)

有效值:

句柄

关于当前状态的一般信息

ListboxTop

第一个显示于列表框中的项目的索引

有效值:

标量

缺省值:

[1]

Max

最大值(与用户界面控制对象有关)

有效值:

标量

缺省值:

与系统有关

Min

最小值(与用户界面控制对象有关)

有效值:

标量

缺省值:

与系统有关

Value

用户界面控制对象的当前值

有效值:

标量或向量

缺省值:

与系统有关

控制组件的访问

HandleVisibility

句柄是否可从命令窗口中与GUIs中访问

有效值:

on、callback、off

缺省值:

on

HitTest

组件是否可由鼠标单击选中

有效值:

on、off

缺省值:

on

例4.3-1创建一个界面(图4-11)包含4种控件:

静态文本、选择开关、双位按键、控件区域框。

编写M脚本文件examGUI4.m,运行该文件便可得如图4-11所示的界面。

图1-11静态文本、选择开关、双位按键及控件区域框

[examGUI4.m]

clfreset

%以下三句对图形窗口的工具条,窗口及控件的位置和尺寸进行设置。

set(gcf,'menubar','none')

set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]);

set(gcf,'defaultuicontrolunits','normalized')

h_axes=axes('position',[0.05,0.2,0.6,0.6]);%设置轴

t=0:

pi/50:

2*pi;y=sin(t);plot(t,y);%画sin(t)的图形

set(h_axes,'xlim',[0,2*pi]);%设置轴上x坐标的范围

set(gcf,'defaultuicontrolhorizontal','left');%把y轴放在窗口的左边

htitle=title('正弦曲线');

set(gcf,'defaultuicontrolfontsize',12);%设置控件字体的大小

uicontrol('style','frame',...

'position',[0.67,0.55,0.25,0.25]);%设置框架控件

uicontrol('style','text',...

'string','正斜体图名:

',...

'position',[0.68,0.77,0.18,0.1],...

'horizontal','left');%设置静态文本控件

hr1=uicontrol(gcf,'style','radio',...

'string','正体',...

'position',[0.7,0.69,0.15,0.08]);%设置选择按钮控件1

set(hr1,'value',get(hr1,'Max'));

%设置hr1属性value的值='max'(选择按钮有点提示选中此项)

set(hr1,'callback',[...

'set(hr1,''value'',get(hr1,''max'')),',...

'set(hr2,''value'',get(hr2,''min'')),',...

'set(htitle,''fontangle'',''normal''),']);

%选择按钮选中时,取normal字体

hr2=uicontrol(gcf,'style','radio',...%设置选择按钮控件2

'string','斜体',...

'position',[0.7,0.58,0.15,0.08],...

'callback',[...

'set(hr1,''value'',get(hr1,''min'')),',...

'set(hr2,''value'',get(hr2,''max'')),',...

'set(htitle,''fontangle'',''italic'')']);

%选择按钮选中时,取斜字体

ht=uicontrol(gcf,'style','toggle',...%设置双位按钮,注意与单功能按钮的区别

'string','Grid',...

'position',[0.67,0.40,0.15,0.12],...

'callback','grid');

例4.3-2概率密度函数作图:

[glht_gui.m]

clfreset

%以下三句对图形窗口的工具条,窗口及控件的位置和尺寸进行设置。

set(gcf,'menubar','none','NumberTitle','off')

set(gcf,'name','概率密度函数作图')

set(gcf,'unit','normalized','position',[0.3,0.3,0.5,0.5]);

set(gcf,'defaultuicontrolunits','normalized')

h_axes=axes('position',[0.1,0.2,0.6,0.6]);%设置轴

set(gcf,'defaultuicontrolhorizontal','left');%把y轴放在窗口的左边

set(gcf,'defaultuicontrolfontsize',12);%设置控件字体的大小

hp1=uicontrol(gcf,'style','push',...%设置按钮

'string','二项分布',...

'position',[0.75,0.70,0.2,0.1],...

'callback','glht1');

[glht1.m]

x=0:

10;

y=binopdf(x,10,0.5);

plot(x,y,'+')

title('二项分布');

例4.3-3如图4-12建立数制转换对话框。

在左边输入一个十进制整数和2~16之间的数,单击“转换”按钮能在右边得到十进制数所对应的2~16进制字符串,单击“退出”按钮退出对话框。

程序如下[examGUI5.m]:

hf=figure('Color',[0,1,1],'Position',[100,200,400,200],...

'Name','数制转换',...

'NumberTitle','off','MenuBar','none');

uicontrol(hf,'Style','Text','Units','normalized',...

'Position',[0.05,0.8,0.45,0.1],'Horizontal','center',...

'String','输入框','Back',[0,1,1]);

uicontrol(hf,'Style','Text','Position',[0.5,0.8,0.45,0.1],...

'Units','normalized','Horizontal','center',...

'String','输出框','Back',[0,1,1]);

uicontrol(hf,'Style','Frame','Position',[0.04,0.33,0.45,0.45],...

'Units','normalized','Back',[1,1,0]);

uicontrol(hf,'Style','Text','Position',[0.05,0.6,0.25,0.1],...

'Units','normalized','Horizontal','center',...

'String','十进制数','Back',[1,1,0]);

uicontrol(hf,'Style','Text','Position',[0.05,0.4,0.25,0.1],...

'Units','normalized','Horizontal','center',...

'String','2~16进制','Back',[1,1,0]);

he1=uicontrol(hf,'Style','Edit','Position',[0.25,0.6,0.2,0.1],...

'Units','normalized','Back',[0,1,0]);

he2=uicontrol(hf,'Style','Edit','Position',[0.25,0.4,0.2,0.1],...

'Units','normalized','Back',[0,1,0]);

uicontrol(hf,'Style','Frame','Position',[0.52,0.33,0.45,0.45],...

'Units','normalized','Back',[1,1,0]);

ht=uicontrol(hf,'Style','Text','Position',[0.6,0.5,0.3,0.1],...

'Units','normalized','Horizontal','center','Back',[0,1,0]);

COMM=['n=str2num(get(he1,''String''));',...

'b=str2num(get(he2,''String''));',...

'dec=trdec(n,b);',...

'set(ht,''string'',dec);'];

uicontrol(hf,'Style','Push','Position',[0.18,0.1,0.2,0.12],...

'String','转换','Units','normalized','Call',COMM);

uicontrol(hf,'Style','Push','Position',[0.65,0.1,0.2,0.12],...

'String','退出','Units','normalized','Call','close(hf)');

程序调用了trdec.m函数文件,该函数的作用是将任意十进制整数转换为2~16进制字符串。

trdec.m函数文件如下:

functiondec=trdec(n,b)

ch1='0123456789ABCDEF';%十六进制的16个符号

k=1;

whilen~=0%不断除某进制基数取余直到商为0

p(k)=rem(n,b);

n=fix(n/b);

k=k+1;

end

k=k-1;

strdec='';

whilek>=1%形成某进制数的字符串

kb=p(k);

strdec=strcat(strdec,ch1(kb+1:

kb+1));

k=k-1;

end

dec=strdec;

例4.3-4一元函数极值问题:

[jzwt_gui.m]

hf=figure('Color',[0,1,1],'Position',[200,200,600,400],...

'Name','一元函数极值问题',...

'NumberTitle','off','MenuBar','none');

set(gcf,'defaultuicontrolfontsize',16);

h_axes=axes('Units','normalized','position',[0.43,0.15,0.5,0.5]);%设置轴

uicontrol(hf,'Style','Text','Units','normalized',...

'Position',[0.05,0.8,0.25,0.1],'Horizontal','center',...

'String','函数式:

','Back',[0,1,1]);

he1=uicontrol(hf,'Style','Edit','Position',[0.3,0.8,0.6,0.1],...

'Units','normalized','Back',[0,1,0]);

uicontrol(hf,'Style','Text','Units','normalized',...

'Position',[0.1,0.6,0.15,0.1],'Horizontal','center',...

'String','极值:

','Back',[0,1,1]);

uicontrol(hf,'Style','Frame','Position',[0.05,0.15,0.3,0.45],...

'Units','normalized','Back',[1,1,0]);

uicontrol(hf,'Style','Push','Position',[0.1,0.45,0.2,0.1],...

'String','最大值','Units','normalized',...

'Call',['n=get(he1,''String'');''jzwt1(n,1);']);

uicontrol(hf,'Style','Push','Position',[0.1,0.25,0.2,0.1],...

'String','最小值','Units','normalized',...

'Call',['n=get(he1,''String'');''jzwt1(n,0);']);

[jzwt1.m]

functionjzwt1(st,m)

if(m==1)

[x,fval]=fminbnd(['-('st')'],0,1);

fval=-fval;

else

[x,fval]=fminbnd(['('st')'],0,1);

end

st=sym(st);

ezplot(st);

axis([01-11]);

holdon

plot(x,fval,'or')

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1