1 / 49

第 5 章 图形用户界面编程

第 5 章 图形用户界面编程. 图形用户界面. 所谓用户界面就是用户与计算机交互通信联系的平台。 图形用户界面是指包含图形对象的用户界面, MATLAB 包含两类基本的图形对象:控件对象和菜单对象。 MATLAB 提供了 “ 布局编辑器 ” 和 “ 菜单编辑器 ” 等工具设计图形用户界面。. 5.1 布局编辑器. MATLAB 窗口的 File 菜单下选 New 下的 GUI, 或在 MATLAB 命令窗口输入 guide 。. 工具条:排列、菜单编辑、 M 文件编辑器、属性观察器、对象浏览器和图形激活钮。. 布局区域. 图形对象. GUI 制作:需求分析. 要点:

sveta
Download Presentation

第 5 章 图形用户界面编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 图形用户界面编程

  2. 图形用户界面 • 所谓用户界面就是用户与计算机交互通信联系的平台。 • 图形用户界面是指包含图形对象的用户界面,MATLAB包含两类基本的图形对象:控件对象和菜单对象。 • MATLAB提供了“布局编辑器”和“菜单编辑器”等工具设计图形用户界面。

  3. 5.1 布局编辑器 • MATLAB窗口的File菜单下选New下的GUI,或在MATLAB命令窗口输入guide。 工具条:排列、菜单编辑、M文件编辑器、属性观察器、对象浏览器和图形激活钮。 布局区域 图形对象

  4. GUI制作:需求分析 要点: 1)确定需要实现哪些功能; 2)确定数据输入/输出方式; 3)确定所需的窗口图形元素; 4)绘制GUI草图; 5)征求用户或他人的意见,并进行修改。

  5. GUI制作:绘制并测试GUI 要点: 1)在计算机上实现需求分析绘制的草图,并依据实际情况进行调整; 2)从用户使用的角度对GUI进行调试。 注:在完成设计与测试之前,不要编码,因为此时编写的代码可能会因设计的更改而失去意义。 在GUI测试稳定后编写并测试代码。

  6. GUI设计原则 • 简单性 简洁、直接、清晰地体现出界面的功能和特征。 • 风格一致性 例如:图形窗口在左,图形控件在右等。 • 易理解性 尽量使用人们熟悉的标志和符号,界面中的动作必须做到及时、连续、可逆,对连续时间长的运算要给出等待时间提示,并允许用户中断等。

  7. 5.2 控件对象 选择 命令钮 单选钮 文本框 滚动条 列表框 坐标轴 开关钮 复选框 标签 框架 弹出式菜单

  8. 控件对象属性:外观及风格控制 • BackgrandColor:设置控件的背景色,可以是RGB颜色值,如[1 1 0],也可以是短名颜色值,如‘y’,还可以是长名颜色值,如‘yellow’; • Cdata:设置显示在控件上图象的颜色值;1行3列。(效果不理想) • ForegroundColor:设置控件上显示文本的颜色; • SelectHighlight:用于确定空间被选中时是否显示被选中的状态(取值:on、off); • String:用于设置控件上显示的文本串; • Visible:设置控件的可见状态。

  9. 控件对象属性:基本信息属性 • Enable:可用状态on;暂停不用状态inactive;不可用状态:off; • Parent:控件对象的父对象句柄所在图形窗口对象句柄; • Selected:用于确定控件是否被选中; • Sliderstep:用于设置滚动条每次移动的步长; • Style:用于决定所创建控件的类型; • Tag:相当于控件对象的名称,在程序设计时可用来指定控件; • TooltipString:设置简单提示信息; • UserData:保存与控件对象有关的信息或数据,可通过set和get函数来调用这些信息。

  10. 控件对象属性:字体控制属性 • FontAngle:用于确定字体的倾斜; • FontName:设置字体的名称; • FontSize:设置字体的大小; • FontUnits:确定字体大小的单位; • FontWeight:定义字体的粗细; • HorizontalAlignment:定义字符对齐方式。

  11. 控件对象属性:回调例程控制 • ButtonDownFcn:定义当鼠标在控件对象上按下时执行的回调例程,可以是字符串、MATLAB表达式或M文件的文件名; • Callback:定义单击控件时执行的回调例程; • CreateFcn:定义在控件对象创建阶段执行的回调例程; • DeleteFcn:定义在控件对象删除阶段执行的回调例程; • BusyAction:决定回调例程的调用方式,取值有cancel与queue,与Interruptible联合使用; • Interruptible:决定回调例程的中断调用模式,如为on则新的回调例程中断当前正在执行的回调例程,如为off则由BusyAction决定调用模式; • UIContextMenu:建立与上下文菜单(context menu)对象的联系,其属性的取值为菜单对象句柄。

  12. 控件对象属性:当前状态信息属性 • ListboxTop:用于显示在列表框最上头的字符串的索引号,默认值为1;是String属性定义的字符串向量的某个元素的索引值。 • Value:决定空间的当前值;对弹出式菜单控件pop_up menus,该属性为已选中的列表项的索引值。

  13. 控件对象属性:当前状态信息属性Max • Max:定义Value属性允许的最大值。 在不同的控件类型中,Max有不同的意义: 复选框:选中时Value属性的值为Max的值; 文本框:Max-Min>1则可进行多行输入; 列表框:Max-Min>1则可允许多个列表项选择; 单选钮:选中时Value属性的值为Max的值; 滚动条:定义了滚动条变化范围的最大值; 开关钮:选中时Value属性的值为Max的值。

  14. 控件对象属性:当前状态信息属性Min • Min:定义了Value属性允许的最小值。 复选框:未选中时Value属性的值为Min的值; 单选钮:未选中时Value属性的值为Min的值; 滚动条:定义了滚动条变化范围的最小值; 开关钮:未选中时Value属性的值为Min的值。

  15. 控件对象属性的操作方式和步骤 • 命令方式:利用uicontrol建立控件对象时,定义控件属性的属性值; 利用set设置、修改属性的属性值; 利用get获得属性的属性值。 • GUI方式:通过Property Inspector GUI设计工具设置控件对象的属性值。 • 程序中控件对象的一般操作步骤:1)获取对象句柄;2)对对象属性进行操作。

  16. Root(根屏幕) Figure(图) Uicontrol(界面控制) Axes(坐标系) Uimenu(界面菜单) UicontextMenu(上下文菜单) Line (线) Surface (面) Rectangle (方) Patch (贴片) Image (图象) Text (文本) Light (光) MATLAB句柄图形 • 句柄图形:MATLAB每幅图的每个组成部分是一个对象,每个对象有一个句柄与其相联。 • MATLAB句柄图体系如下:

  17. 图形句柄 • 在MATLAB中,每个图形对象都由一个数字来表识,称为句柄,用来唯一确定图形对象。 • 计算机屏幕:根对象(Root),句柄为0; • 图形窗口:句柄为整数; • 其它:句柄为浮点值。

  18. 图形对象句柄的获取 • 每个对象在创建时可以返回该对象的句柄。例如: h=plot(0:.1:2*pi,sin(0:.1:2*pi)); • 利用标准对象句柄获取函数获取: gcf:获取当前图形窗口的句柄; gca:获取当前坐标轴的句柄; gco:获取当前图形的当前对象的句柄; gcbf/gcba/gcbo:获取回调例程图形窗口/坐标轴/当前对象的句柄。

  19. 图形对象句柄的获取findobj • h=findobj(‘Propertyname’,propertyValue,…):获得指定属性Propertyname的属性值为propertyValue对应对象的句柄。 • h=findobj(objHandle,‘Propertyname’,propertyValue,…):同上,但将查找范围限制在objHandle指定的对象及其子对象中。 • h=findobj(objHandle,’flat’,‘Propertyname’,propertyValue,…):同上,但将查找范围不包括子对象。 • h=findobj:返回一个列向量,是根对象及其所有子对象的句柄值。

  20. 图形对象句柄的获取举例 % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) h=findobj('Tag','axes1'); x=-pi:0.1:pi; y=sin(x); plot(x,y,'Parent',h); % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) h=findobj('Tag','axes2'); x=-pi:0.1:pi; y=cos(x); plot(x,y,'Parent',h);

  21. 对象及属性的操作:删除和拷贝 • delete(handle):删除句柄handle对应对象及其子对象; • c=copyobj(h,p):复制对象句柄,c为新得到的句柄。如果h和p均为向量,则将h对应的句柄分别作为p各对应对象的子对象的句柄;如果h为向量,p为标量,则将h对应的句柄作为p对应对象的子对象的句柄;如果h为标量,p为向量,则将h对应的句柄分别作为p对应对象的子对象的句柄。

  22. 对象及属性的操作copyobj举例 mesh(peaks(30)); text(30,20,2,'\leftarrow peak'); h=findobj('String','\leftarrow peak'); figure mesh(peaks(20)); ha=copyobj(h,gca);

  23. 对象及属性的操作:创建、设置和获取 • h=uicontrol(parent,’PropertyName’,propertyValue,…) 缺省parent表示在当前图形窗口创建控件对象。 • set(handle ,’PropertyName’,propertyValue,…) 用来设置句柄为handle的控件对象的属性值。 • get(handle, ’PropertyName’) 返回句柄为handle的对象中名为PropertyName的属性的属性值。

  24. 对象及属性的操作举例 x=0:.1:2*pi; y=sin(x); h_sin=plot(x,y,'*'); lineWidth=get(h_sin,'LineWidth'); set(h_sin,'Color',[1 0.5 0],'LineWidth',lineWidth+4); hpop=uicontrol('Style','popup','String','Black|Green|Blue|Red',... 'Position',[340 190 100 150],'Callback','setmap',... 'Tag','popup'); setmap.m文件中的内容: hp=findobj('Tag','popup'); val=get(hp,'Value'); if val==1 set(gca,'Color',[0,0,0]); elseif val==2 set(gca,'Color',[0 1 0]); elseif val==3 set(gca,'Color',[0 0 1]); elseif val==4 set(gca,'Color',[1 0 0]); end

  25. 5.3 菜单对象和上下文菜单 • 在MATLAB中有两类菜单:下拉式菜单uimenu和上下文菜单uicontextmenu。 • 下拉式菜单(菜单对象)的位置是固定的。 • 上下文菜单的位置是不固定的,且总与某个图形对象相联系,通过鼠标右键激活,同时下拉式菜单可为其中的菜单项。

  26. 菜单对象的创建 hm=uimenu(h,’PropertyName’,value,…) 以h为父对象的句柄创建一个菜单对象,并返回该菜单的句柄。例如: h0=figure('MenuBar','none','Toolbar','none','Name','Draw Graph'); h1=uimenu(h0,'Label','&Draw'); h11=uimenu(h1,'Label','&Membrane','Accelerator','M','Callback','Membrane'); h12=uimenu(h1,'Label','&Peaks','Accelerator','P','Callback','Peaks'); h13=uimenu(h1,'Label','&Sphere','Accelerator','S','Callback','Sphere'); h2=uimenu(h0,'Label','&Color'); h21=uimenu(h2,'Label','&Hot','Accelerator','H','Callback','Colormap(hot)'); h22=uimenu(h2,'Label','&Cool','Accelerator','C','Callback','Colormap(cool)'); h23=uimenu(h2,'Label','c&Opper','Accelerator','O','Callback','Colormap(copper)'); h24=uimenu(h2,'Label','RGB','Separator','on'); h241=uimenu(h24,'Label','&Red','Callback','set(h241,''Checked'',''on'');'); h242=uimenu(h24,'Label','&Green','Callback','set(h242,''Checked'',''on'');'); h243=uimenu(h24,'Label','&Blue','Callback','set(h243,''Checked'',''on'');'); ‘‘Checked’’

  27. 上下文菜单创建 • h=uicontextmenu(‘PropertyName’,propertyValue,…) • 一般步骤: 1)利用uincontextmenu创建上下文菜单对象; 2)利用uimenu制作菜单项; 3)利用set将上下文菜单与具体的图形对象联系起来。

  28. 上下文菜单创建举例 cmenu=uicontextmenu; hline=plot(1:10,'UIContextMenu',cmenu); item1=uimenu(cmenu,'Label','dashed',... 'Callback','set(hline,''LineStyle'',''--'')'); item2=uimenu(cmenu,'Label','dotted',... 'Callback','set(hline,''LineStyle'','':'')'); item1=uimenu(cmenu,'Label','Solid',... 'Callback','set(hline,''LineStyle'',''-'')');

  29. 利用菜单编辑器制作菜单

  30. 菜单属性 • 在菜单编辑器的右边有少量有关菜单属性值的设置。 Checked:对选中的菜单打标记(对顶层菜单无用);Label:设置菜单标题;Separator:用于在菜单上设置分隔条;Visible:设置菜单的可见状态;Accelerator:用于设置菜单加速键;Callback:定义单击菜单对象时执行的回调例程;Tag:标记菜单项的名称,便于在程序设计时通过该名称指定菜单项。

  31. 5.4 对话框 • 在GUI程序设计中,对话框是最重要的显示信息和取得用户数据的用户界面对象。 • MATLAB的对话框分为两类:公共对话框和一般对话框。 公共对话框:文件打开对话框、文件保存对话框、颜色设置对话框、字体设置对话框、打印页面对话框、打印预览对话框和打印对话框。 一般对话框:帮助对话框、出错信息对话框、信息提示对话框等。

  32. 文件打开对话框 • [fname,pname]=uigetfile(‘FilterSpec’,’DialogTitle’,x,y) 获取待打开文件的文件名fname及路径信息pname。FilterSpec指定文件类型;DialogTitle指定对话框标题名;x,y指定对话框位置信息。 • uigetfile并未打开有关文件。MATLAB提供了基于C语言实现的低级文件I/O函数。 >> [fn,pn]=uigetfile('*.m','Open M File',10,10); >> fn fn = sample1.m >> pn pn = C:\MATLAB6p5\work\

  33. 打开、关闭文件 • [fid,errormessage]=fopen(filename,permission); 使用permission指定的模式打开filename指定的文件,成功时返回文件标识,否则返回系统错误信息errormessage. permission的取值及含义:‘r’:只读模式;‘w’:写模式(含创建);’a’:添加;‘r+’:读写;‘w+’:读写(含创建);‘a+’:添加(含创建)。 • status=fclose(fid):关闭fid指定的文件,操作成功时返回0,否则返回1。

  34. 无格式输入/输出 • [a,count]=fread(fid,size,precision,skip):从指定文件fid中读取size个单位长度为precision的数据元素至a中,skip表示每次读后跳过的字节数。 count表示实际读入的数据个数。 size取值含义:标量n(读取n个元素);inf(读到文件结尾);[m,n](读取m*n个元素)。 precision: ‘uchar’(8位无符号字符—缺省值);‘schar’(8位带符号字符);‘int8’(8位带符号整数);‘uint8’(8位无符号整数);‘single’(32位浮点数);‘double’(64位浮点数)。 • count=fwrite(fid,a,precision,skip):将a中数据转换成precision指定的数据元素写入fid指定的文件中,count为成功写入的元素数目。

  35. 格式化输入/输出 • count=fprintf(fid,format,a,…):将a中数据用format格式化后写入文件fid中,count为写入的字节数。 fid缺省表示向显示屏输出。例如: x=0:.2:2; y=[x;2*exp(x)]; fid=fopen('data.txt','w'); fprintf(fid,'%6.2f %12.8f\n',y); fclose(fid); • [a,count]=fscanf(fid,format,size):从fid指定文件中读取size指定的数据,并根据format指定的格式对其转换后返回a,count为读取的元素数目。

  36. 按行从文件读数据 • line=fgetl(fid):从文件fid中读1行数据至line,返回的行不包括换行符。遇到文件结尾则返回-1。 • line=fgets(fid):从文件fid中读1行数据至line,返回的行包括换行符。遇到文件结尾则返回-1。

  37. 文件测试 • eofstat=feof(fid): 文件结尾返回-1,否则返回0。 • frewind(fid):将文件位置指针反绕到文件开头。 • status=fseek(fid,offset,origin):将文件的位置指针定位到origin偏移offset指定的位置。Origin的取值为 ‘bof’或 -1 文件开始 ‘cof’或 0 文件当前位置 ‘eof’或 1 文件结束 • position=ftell(fid):返回位置指针指向的位置,失败时返回-1。

  38. 文件保存对话框 • [fname,pname]=uinputfile(‘Initfile’,’DialogTitle’,x,y): Initfile为指定待保存文件类型,DialogTitle为对话框标题,x和y为对话框位置。 例如:>> uiputfile('*.m','Save') ans = kk

  39. 颜色设置对话框 • c=uisetcolor(h_or_c,’DialogTitle’): h_or_c为初始颜色,可以是一个1X3的RGB向量,也可以是一个图形对象的句柄(该图形对象必有一个颜色属性)。 >> c=uisetcolor([1 0 1],'Select Color') c = 0.2510 0 0.2510

  40. 字体设置对话框 • s=uisetfont(h_or_s,’Dialog Title’):h_or_s为初始字体属性,可以是一个对象的句柄,也可以是一个字体属性结构;s为字体属性结构,包括(FontName,FontUnits,FontSize,FontWeight,FontAngle等域)。 Text1 = uicontrol('style','text','string','XxYyZz'); Text2 = uicontrol('style','text','string','AxBbCc',... 'position', [200 20 60 20]); s = uisetfont(Text1, 'Update Font'); if isstruct(s) % Check for cancel set(Text2, s); end

  41. 帮助对话框 • h=helpdlg(‘HelpString’,’dlgname’): HelpString为帮助信息;dlgname为对话框标题。例如: >> helpdlg('This is a dialogue!','Help')

  42. 在线帮助窗口helpwin(补) >> str={'Topic 1','Help string for topic1‘;'Topic 2' 'Help string for topic2'}; >> helpwin(str,'Topic 2','My Title')

  43. 信息提示对话框 • h=msgbox(message,title,’icon’): icon的取值为:‘none’,’error’,’help’和‘custom’,默认为‘none’。 Data=1:64;Data=(Data'*Data)/64; h=msgbox('String','Title','custom',Data,hsv(64));

  44. 5.5 GUI编程 • 设计一个如下所示的GUI,当单击“绘图”按钮时,将在坐标轴上绘制选择的图形。 标签的String属性的值为‘图形选择’ Figure的Name属性值为‘GUI例子程序’ 单选钮的string属性值为‘正弦曲线’,Tag属性值为sin 坐标轴的Tag属性值为‘axes1’ 单选钮的string属性值为‘余弦曲线’,Tag属性值为cos, Value属性值为1.0 命令钮的string属性值为‘绘图’,Tag属性值为draw 保存时文件名为fgui

  45. fgui.m程序说明:gui_State % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @fgui_OpeningFcn, ... 'gui_OutputFcn', @fgui_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT gui_OpeningFcn窗口创建前执行的函数; gui_OutputFcn输出时执行的函数; gui_Callback确定控件的回调函数; gui_mainfcn调用分派函数。 gui_Singleton大于0表示只有一个实例化的图形窗口存在; gui_Name图形窗口对应文件名;

  46. fgui.m程序说明: fgui_OpeningFcn % --- Executes just before fgui is made visible. function fgui_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to fgui (see VARARGIN) % Choose default command line output for fgui handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes fgui wait for user response (see UIRESUME) % uiwait(handles.figure1); guidata:存储或检索应用数据。

  47. fgui.m程序说明: fgui_OutputFcn % --- Outputs from this function are returned to the command line. function varargout = fgui_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output;

  48. fgui.m程序说明:draw_Callback % --- Executes on button press in draw. function draw_Callback(hObject, eventdata, handles) % hObject handle to draw (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) x=-pi:.1:pi; if get(handles.sin,'Value')>0 plot(x,sin(x),'Parent',handles.axes1); elseif get(handles.cos,'Value')>0 plot(x,cos(x),'Parent',handles.axes1); end 用户输入程序

  49. fgui.m程序说明:sin_Callback % --- Executes on button press in sin. function sin_Callback(hObject, eventdata, handles) % hObject handle to sin (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of sin set(handles.cos,‘Value’,get(handles.cos,‘Min’)); %设置cos单选钮为补选中状态 Cos_Callback与此类似

More Related