图形用户界面 Graphical User Interface: GUI
终端用户和计算机进行信息交流的工具和方法
图形用户界面设计:定制具有图形用户界面的程序
1
大纲设计内容:菜单设计、对话框设、用户界面设计
设计原则:
简单:界面直观简洁,避免数值
一致:开发风格一致,新界面与其他界面一致
习惯:用广泛熟悉的标志和符号
迅速:对用户的操作响应迅速
设计步骤:
明确设计任务
绘制草图
制作静态界面并检查
编写界面动态功能程序并检查
2
菜单设计
菜单(uimenu):以figure图形窗口对象作为“父对象”,从一批功能选项中浏览和选择某项功能
标准菜单
MenuBar属性:none 隐藏标准菜单
figure 显示标准菜单
例:h_figure=figure
set(h_figure,’menubar’,’none’)
set(h_figure,’menubar’,’figure’)
set(gcf,’menubar’,’figure’)
用户菜单的建立 uimenu
建立一级菜单项的函数调用形式为:
h1=uimenu(窗口句柄,'属性名1',属性值1,'属性名2',属性值2,...)
建立子菜单项的函数调用形式为:
h2=uimenu(h1,'属性名1',属性值1,'属性名2,'属性值2,...)
注:默认排列在标准菜单右边;自制子菜单按照创建先后自上而下排列,简捷键“&”,快捷键“Accelerator”
菜单对象常用属性
Enable: on/off 启动或者禁止菜单功能
Position: 标量 指定菜单的相对位置,例如为1时在最左边
Separator:on/off 菜单中产生分隔效果
Visible: on/off 菜单是否可见
Parent: 对象句柄值 标明了菜单对象所在的图形窗口或其父菜单
Children:空矩阵或者句柄值向量,是由子菜单对象的句柄组成
Label: string, 命名用户菜单项名称
Callback: string 可以是标准命令,或者在路径中可找到的m文件
例1
hfig = figure;set(hfig,'MenuBar','none');h_menu = uimenu(hfig,'label','&Color');h_submenu1 = uimenu(h_menu,'label','&Green',... 'Callback','set(gcf,''color'',''green'')');h_submenu2 = uimenu(h_menu,'label','&Black',... 'Callback','set(gcf,''color'',''black'')','Accelerator','b');
3
准备
快捷菜单(右键菜单) uicontextmenu
具体步骤为:
(1)利用uicontextmenu函数建立快捷菜单。
(2)利用uimenu函数为快捷菜单建立菜单项。
(3)利用set函数将该快捷菜单和某图形对象联系起来。
注意:右键只有与相应的图形对象相关联
例2
t = (-5*pi:pi/40:5*pi)+eps;y = sin(t)./t;hline = plot(t,y); cm = uicontextmenu; %创建右键菜单 %制作具体菜单项uimenu(cm,'label','green','callback','set(hline,''color'',''g''),')uimenu(cm,'label','blue','callback','set(hline,''color'',''b''),')uimenu(cm,'label','red','callback','set(hline,''color'',''r''),')%定义相应的回调set(hline,'uicontextmenu',cm)
例3
建立“图形演示系统”菜单。菜单条中含有3个菜单项:Plot、Option和Quit。Plot中有Sine Wave和Cosine Wave两个子菜单项,分别控制在本图形窗口画出正弦和余弦曲线。Option菜单项的内容:其中Grid on和Grid off控制给坐标轴加网格线,Box on和Box off控制给坐标轴加边框,而且这4项只有在画有曲线时才是可选的。Figure Color控制图形窗口背景颜色。Quit控制是否退出系统。
程序如下:
screen=get(0,'ScreenSize');W=screen(3);H=screen(4);figure('Color',[1,1,1],'Position',[0.2*H,0.2*H,0.6*W,0.4*H],... 'Name','图形演示系统','NumberTitle','off','MenuBar','none');%定义Plot菜单项hplot=uimenu(gcf,'Label','&Plot');uimenu(hplot,'Label','Sine Wave','Callback',['t=-pi:pi/20:pi;',... 'plot(t,sin(t));','set([hgon,hgoff,hbon,hboff],''Enable'',''on'');']);uimenu(hplot,'Label','Cosine Wave','Call',['t=-pi:pi/20:pi;',... 'plot(t,cos(t));','set([hgon,hgoff,hbon,hboff],''Enable'',''on'');']);%定义Option菜单项hoption=uimenu(gcf,'Label','&Option');hgon=uimenu(hoption,'Label','&Grig on','Call','grid on','Enable','off');hgoff=uimenu(hoption,'Label','&Grig off','Call','grid off','Enable','off');hbon=uimenu(hoption,'Label','&Box on','separator','on','Call','box on','Enable','off');hboff=uimenu(hoption,'Label','&Box off','Call','box off','Enable','off');hfigcor=uimenu(hoption,'Label','&Figure Color','Separator','on');uimenu(hfigcor,'Label','&Red','Accelerator','r','Call','set(gcf,''Color'',''r'');');uimenu(hfigcor,'Label','&Blue','Accelerator','b','Call','set(gcf,''Color'',''b'');');uimenu(hfigcor,'Label','&Yellow','Call','set(gcf,''Color'',''y'');'); uimenu(hfigcor,'Label','&White','Call','set(gcf,''Color'',''w'');'); %定义Quit菜单项uimenu(gcf,'Label','&Quit','Call','close(gcf)');
例4
绘制曲线 y=2e-0.5xsin(2πx),并建立一个与之相联系的快捷菜单,用以控制曲线的线型和曲线宽度。
程序如下:
x = 0:pi/100:2*pi;y = 2*exp(-0.5*x).*sin(2*pi*x);hl = plot(x,y);hc = uicontextmenu; %建立快捷菜单hls = uimenu(hc,'Label','线型'); %建立菜单项hlw = uimenu(hc,'Label','线宽');uimenu(hls,'Label','虚线','Call','set(hl,''LineStyle'','':'');');uimenu(hls,'Label','实线','Call','set(hl,''LineStyle'',''-'');');uimenu(hlw,'Label','加宽','Call','set(hl,''LineWidth'',2);');uimenu(hlw,'Label','变细','Call','set(hl,''LineWidth'',0.5);');set(hl,'UIContextMenu',hc);
4
对话框
4.1 Mesh设置
对话框的控件
(1)按钮(Push Button)。
(2)双位按钮(Toggle Button)。
(3)单选按钮(Radio Button)。
(4)复选框(Check Box)。
(5)列表框(List Box)。
(6)弹出框(Popup Menu)。
(7)编辑框(Edit Box)。
(8)滑动条(Slider)。
(9)静态文本(Static Text)。
(10)边框(Frame)。
用户界面设计
图形界面控制面板
属性编辑器
事件过程编辑器
菜单编辑器
位置调整工具
例5
建立数制转换对话框。在左边输入一个十进制整数和2~16之间的数,单击“转换”按钮能在右边得到十进制数所对应的2~16进制字符串,单击“退出”按钮退出对话框。
程序如下:
hf=figure('Color',[1,1,1],'Position',[200,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','输 入 框','BackgroundColor',[0 1 1]);uicontrol(hf,'Style','Text', 'Units','normalized',... 'Position',[0.51,0.8,0.45,0.1],'Horizontal','center',... 'String','输 出 框','BackgroundColor',[0 1 1]);uicontrol(hf,'Style','Frame', 'Units','normalized',... 'Position',[0.04,0.33,0.45,0.45],'BackgroundColor',[0 1 1]);uicontrol(hf,'Style','Text', 'Units','normalized',... 'Position',[0.05,0.6,0.25,0.1],'Horizontal','center',... 'String','十进制数','BackgroundColor',[1 1 0]);uicontrol(hf,'Style','Text', 'Units','normalized',... 'Position',[0.05,0.4,0.25,0.1],'Horizontal','center',... 'String','2~16进制','BackgroundColor',[1 1 0]);he1=uicontrol(hf,'Style','Edit','Units','normalized',... 'Position',[0.25,0.6,0.2,0.1]);he2=uicontrol(hf,'Style','Edit','Units','normalized',... 'Position',[0.25,0.4,0.2,0.1]);uicontrol(hf,'Style','Frame','Units','normalized',... 'Position',[0.52,0.33,0.45,0.45],'Back',[1,1,0]);ht=uicontrol(hf,'Style','Text','Units','normalized',... 'Position',[0.6,0.5,0.3,0.1],'Horizontal','center');COMM=['n=str2num(get(he1,''String''));',... 'b=str2num(get(he2,''String''));',... 'dec=trdec(n,b);','set(ht,''string'',dec);'];uicontrol(hf,'Style','Push','Units','normalized',... 'Position',[0.18,0.1,0.2,0.12],'String','转 换','Call',COMM);uicontrol(hf,'Style','Push','Units','normalized',... 'Position',[0.65,0.1,0.2,0.12],'String','退 出','Call','close(hf)');
程序调用了trdec.m函数文件,该函数的作用是将任意十进制整数转换为2~16进制字符串。trdec.m函数文件如下:
function dec=trdec(n,b)ch1='0123456789ABCDEF';%十六进制的16个符号k=1;while n~=0 %不断除某进制基数取余直到商为0 p(k)=rem(n,b); n=fix(n/b); k=k+1;endk=k-1;strdec='';while k>=1 %形成某进制数的字符串 kb=p(k); strdec=strcat(strdec,ch1(kb+1:kb+1)); k=k-1;enddec=strdec;