1 / 35

第七讲 MATLAB 图形用户界面设计

第七讲 MATLAB 图形用户界面设计. 7.1 MATLAB 图形界面编程基础 7.2 MATLAB 标准对话框 7.3 MATLAB 图形界面设计基本控件 7.4 MATLAB 界面菜单系统设计 7.5 可视界面开发工具 GUIDE 介绍 7.6 程序设计举例与习题. 7.1 MATLAB 图形界面编程基础. MATLAB 语言提供了面向对象的图形界面设计方法。对象之间的关系如下图所示。. 7.1 MATLAB 图形界面编程基础. 窗口对象 figure.

abra
Télécharger la présentation

第七讲 MATLAB 图形用户界面设计

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. 第七讲 MATLAB图形用户界面设计 7.1 MATLAB 图形界面编程基础 7.2 MATLAB 标准对话框 7.3 MATLAB 图形界面设计基本控件 7.4 MATLAB 界面菜单系统设计 7.5 可视界面开发工具 GUIDE 介绍 7.6 程序设计举例与习题

  2. 7.1 MATLAB 图形界面编程基础 MATLAB 语言提供了面向对象的图形界面设计方法。对象之间的关系如下图所示。

  3. 7.1 MATLAB 图形界面编程基础 窗口对象 figure 每一个窗口对象 figure 下可以有4种对象,即菜单 uimenu 对象、控件 uicontrol 对象、坐标轴 axes 对象和右键快捷菜单 uicontextmenu 对象。 • h=figure;返回窗口句柄 h • figure(h);将窗口 h 设为当前窗口 • gcf;返回当前窗口句柄 h • get(h);查看当前窗口的属性及其取值 • set(h);查看窗口的所有属性及可能取值

  4. 7.1 MATLAB 图形界面编程基础 窗口对象 figure 窗口属性可以由下面命令设置或修改 set(h,‘PropertyName1’,PropertyVal1,‘PropertyName2’,PropertyVal2,...),也可以用图形界面的形式设置 首先用下述命令画出一波形 t=0:0.1:2*pi;y=sin(t);plot(t,y) 再选择图形窗口下 Edit/Figure Property… 菜单 将弹出窗口属性对话框,并可以看到对象的层次关系以及可以编辑所选择的任何对象的属性。 注意不是所有属性都可以在图形界面上设置,但都可以用 set 命令来进行设置。

  5. 7.1 MATLAB 图形界面编程基础 窗口对象 figure 的各种回调函数 回调函数 callback 是指该对象指定的事件发生时调用的函数,窗口对象的回调函数主要有以下一些。

  6. 7.1 MATLAB 图形界面编程基础 • 根对象属性详细的资料见 Root Property帮助文档 • 窗口对象属性详细的资料见 figure 函数的帮助文档 • 坐标轴对象属性详细的资料见 axes 函数的帮助文档 • 菜单对象属性详细的资料见 uimen 函数的帮助文档 • 控件对象属性详细的资料见 uicontrol 函数的帮助文档 • 右键菜单对象见 uicontextmenu 函数的帮助文档 • 线对象属性详细的资料见 line 函数的帮助文档 • 文字对象属性详细的资料见 text 函数的帮助文档 • 表面图对象属性详细的资料见 surface 函数的帮助文档 • 图像对象属性详细的资料见 image 函数的帮助文档 • 光源对象属性详细的资料见 light 函数的帮助文档 • 三维块对象属性详细的资料见 patch 函数的帮助文档 • 矩形对象属性详细的资料见 rectangle 函数的帮助文档

  7. 7.2 MATLAB 标准对话框 • 文件对话框 [fname, pname]=uigetfile(ffilter, strTitle, x, y) >> [fname, pname]=uigetfile('*.m;*.txt;*.c', 'Please select a file name') fname =diff.m pname =F:\MATLAB6p1\work\@polynom\

  8. 7.2 MATLAB 标准对话框 • 文件写对话框 [fname, pname]=uiputfile(ffilter, strTitle, x, y) [filename, pathname] = uiputfile('*.m;*.mdl;*.mat', 'Save As')

  9. 7.2 MATLAB 标准对话框 • 颜色设置对话框 c=uisetcolor; 或 c=uisetcolor(c0); >> uisetcolor ans = 0.5020 1.0000 0

  10. 7.2 MATLAB 标准对话框 • 字体设置对话框 h=uisetfont(h_Text, strTitle) • 其中 h_Text 为要改变的字符句柄,strTitle为对话框标题 >> uisetfont ans = FontName: 'Arial' FontUnits: 'points' FontSize: 10 FontWeight: 'normal' FontAngle: 'normal'

  11. 7.2 MATLAB 标准对话框 • 警告、错误与提示信息对话框warndlg(), errordlg(), helpdlg() >> h=warndlg({'ERROR: There is...encountered', 'Try again'}, 'Warning') h = 331.0017 >> h=errordlg({'ERROR: There is...encountered', 'Program Aborted'}, 'Error') h = 331.0020 >> h=helpdlg({'HELP: Refer to the manual', 'Have a nice day'}, 'Message Box Dialog') h = 331.0022

  12. 7.3 MATLAB 图形界面设计基本控件 MATLAB 语言的控件可以由 uicontrol 函数设置,该函数的调用格式为 h = uicontrol( PropertyName1, PropertyValue1, PropertyName2, PropertyValue2, …) 控件的属性及其取值见 uicontrol 函数的帮助文档,各种不同的控件由属性 Style 的值来控制,该属性取值有: pushbutton, togglebutton, radiobutton, checkbox, edit, text, slider,frame, listbox, popupmenu

  13. 7.3 MATLAB 图形界面设计基本控件 控件的其他重要的属性见下表

  14. 7.3 MATLAB 图形界面设计基本控件 控件使用例子 h = uicontrol('Style', 'pushbutton', 'String', 'Clear',... 'Position', [20 150 100 70], 'Callback', 'cla'); 该例子创建一按纽,按下时清除当前坐标轴 下例创建弹出菜单,根据选择不同项目执行不同操作,回调函数 setmap.m见右所示。 val = get(hpop,'Value'); if val == 1 colormap(hsv) elseif val == 2 colormap(hot) elseif val == 3 colormap(cool) elseif val == 4 colormap(gray) end hpop = uicontrol('Style', ‘listbox',... 'String', 'hsv|hot|cool|gray',... 'Position', [20 320 100 50],... 'Callback', 'setmap');

  15. 7.4 MALTAB 界面菜单系统设计 MATLAB 允许用户设计出自己所需要的菜单系统,菜单的设置是由 uimen 函数来完成的,其调用格式为 h =uimenu( Figurehandle, 'PropertyName1', value1, 'PropertyName2', value2,...) 如果用户想在某一个菜单条下定义一个新的子菜单条,则可以使用下面给出的命令格式 h =uimenu( parent_menu_handle, 'PropertyName1', value1, 'PropertyName2', value2,...)

  16. 7.4 MALTAB 界面菜单系统设计 菜单对象的属性也有许多,最重要的有以下两个 • 菜单条的提示名称 Label:它可以是一个任意字符串。在菜单项提示的字符串中允许用户使用 & 标志,以表示该符号后面的字符在显示时有一个下划线修饰,这使得用户可以用键盘键容易地激活相应的菜单项。 • 回调函数 Callback:它可以为一个函数名称,也可以是一组 MATLAB 命令。在该菜单被选中以后, MATLAB将自动地调用此回调函数来作出对相应菜单项的响应,如果没有设置一个合适的回调函数,则此菜单项也将失去其应有的意义。

  17. 7.4 MALTAB 界面菜单系统设计 菜单例子 hf=figure('Name', 'Menu Test Window', 'NumberTitle', 'off', 'MenuBar', 'none'); hmfile=uimenu(hf, 'label', '&File'); hmhelp=uimenu(hf, 'label', '&Help'); uimenu(hmfile, 'label', '&New', 'callback', 'disp(''New Item Selected'')'); uimenu(hmfile, 'label', '&Open', 'callback', 'disp(''Open Item Selected'')'); hmsav=uimenu(hmfile, 'label', '&Demo', 'Enable', 'off'); uimenu(hmsav, 'label', 'Filter Demo', 'callback', 'filtdem2;'); uimenu(hmsav, 'label', 'Filtering Demo', 'callback', 'filtdem;'); uimenu(hmfile, 'label', 'Save &As', 'callback', 'key=4; filesys;'); uimenu(hmfile, 'label', '&Exit','separator','on', 'callback', 'close(hf)'); uimenu(hmhelp, 'label', 'About...', 'callback', ['disp(''myhelp''); set(hmsav, ''Enable'',''on'')']);

  18. 7.4 MALTAB 界面菜单系统设计 右键菜单用命令 uicontextmenu 创建,见下面例子 % 创建右键快捷菜单 cmenu = uicontextmenu; % 画出图形曲线并与右键菜单发生联系 hline = plot(1:10, 'UIContextMenu', cmenu); %定义右键菜单项的 Callback 函数 cb1 = ['set(hline, ''LineStyle'', ''--'')']; cb2 = ['set(hline, ''LineStyle'', '':'')']; cb3 = ['set(hline, ''LineStyle'', ''-'')']; %定义右键菜单项 item1 = uimenu(cmenu, 'Label', 'dashed', 'Callback', cb1); item2 = uimenu(cmenu, 'Label', 'dotted', 'Callback', cb2); item3 = uimenu(cmenu, 'Label', 'solid', 'Callback', cb3);

  19. 7.5 可视界面开发工具 GUIDE 介绍 MATLAB 提供了一个可视的图形界面开发程序 GUIDE。它的含义是 GUI Design Environment。在MATLAB命令窗中键入命令 guide 将得到如图所示界面。

  20. 7.5 可视界面开发工具 GUIDE 介绍 开发含GUI界面的程序包含两个步骤 • 设计 GUI 界面及其各个控件布局 • 为各个 GUI 界面控件编程 Callback 函数 从原理上来说,任何含GUI界面的程序都可以用M文件编辑器 Editor来实现,但显然用 GUIDE 工具设计界面要方便得多。GUIDE设计将得到两个文件,他们是 • FIG文件:包含界面布局设计及各个图形对象属性取值 • M文件:调出界面的主程序及各个回调子程序,一般称为M应用文件。

  21. 7.5 可视界面开发工具 GUIDE 介绍 应用 GUIDE 进行设计时,先要设置好GUIDE应用选项,选择菜单 Tools/Application Options,将弹出如下对话框。 各个选项含义很容易明白,在此不再多说。

  22. 7.5 可视界面开发工具 GUIDE 介绍 一般来说,在MATLAB命令窗执行的绘图函数将在当前图形窗口绘图,但一般GUI窗口不希望这样操作,这可由选项Command-Line Accessibility 来控制,它的含义如下。

  23. 7.5 可视界面开发工具 GUIDE 介绍 当你选择 Generate callback function prototypes时, GUIDE为每个有 Callback 函数的控件产生 Callback 原型函数。Callback 原型函数语法及参数如下 function varargout = objectTag_Callback(h,eventdata,handles,varargin)

  24. 7.5 可视界面开发工具 GUIDE 介绍 GUI图形界面对象的属性可以用 Property Inspector 来查看与修改。

  25. 7.5 可视界面开发工具 GUIDE 介绍 可以用 Object Browser 查看图形对象的层次图

  26. 7.5 可视界面开发工具 GUIDE 介绍 下面介绍各个图形对象的Callback编程 Toggle Button的 Callback 编程 function varargout = togglebutton1_Callback(h,eventdata,handles,varargin) button_state = get(h,'Value'); if button_state == get(h,'Max') % toggle button is pressed elseif button_state == get(h,'Min') % toggle button is not pressed end a(:,:,1) = rand(16,128); a(:,:,2) = rand(16,128); a(:,:,3) = rand(16,128); set(h,'CData',a) 为按纽加图像

  27. 7.5 可视界面开发工具 GUIDE 介绍 Radio Button的编程 Radio Button 选还是没有被选由 Value 属性值来确定 Value = Max, 被选. Value = Min, 没有被选 为了使得一组 Radio Button 中只有一个被选,要求用户编程设置其他的 Radio Button 的 Value值为零,被选中的那个 Radio Button 系统设为 1。 function varargout = radiobutton1_Callback(h,eventdata,handles,varargin) off = [handles.radiobutton2,handles.radiobutton3,handles.radiobutton4]; set(off,'Value',0)

  28. 7.5 可视界面开发工具 GUIDE 介绍 Check Box的编程 Radio Button 选还是没有被选由 Value 属性值来确定 Value = Max, 被选. Value = Min, 没有被选 Check Box 的 Callback 编程如下。 function checkbox1_Callback(h,eventdata,handles,varargin) if (get(h,'Value') == get(h,'Max')) % then checkbox is checked-take approriate action else % checkbox is not checked-take approriate action end

  29. 7.5 可视界面开发工具 GUIDE 介绍 Edit Text的编程 function edittext1_Callback(h,eventdata,handles,varargin) user_string = get(h,'string'); % proceed with callback... 从 Edit Text 中取数值 function edittext1_Callback(h,eventdata,handles,varargin) user_entry = str2double(get(h,'string')); if isnan(user_entry) errordlg('You must enter a numeric value','Bad Input','modal') end % proceed with callback...

  30. 7.5 可视界面开发工具 GUIDE 介绍 List Box的编程,从 List Box 中获得所选的项目(本例有2个项目被选中) function [var1,var2] = get_var_names(handles) % Returns the names of the two variables to plot list_entries = get(handles.listbox1,'String'); index_selected = get(handles.listbox1,'Value'); if length(index_selected) ~= 2 errordlg('You must select two variables','Incorrect Selection','modal') else var1 = list_entries{index_selected(1)}; var2 = list_entries{index_selected(2)}; end

  31. 7.5 可视界面开发工具 GUIDE 介绍 Popup Menu的编程 function varargout = popupmenu1_Callback(h,eventdata,handles,varargin) val = get(h,'Value'); switch val case 1 % The user selected the first item case 2 % The user selected the second item % etc. function varargout = popupmenu1_Callback(h,eventdata,handles,varargin) val = get(h,'Value'); string_list = get(h,'String'); selected_string = string_list{val}; % convert from cell array to string % etc.

  32. 7.6 程序设计举例与习题 例子:设计如下图所示界面

  33. 7.6 程序设计举例与习题 第一步:设计界面布局

  34. 7.6 程序设计举例与习题 第二步:设置各个对象的属性 • 三个 Edit Box 的 String 属性分别设为 50,120,0:0.001:0.25,作为f1, f2, t的初始值 • 三个 Edit Box 的 Tag 属性分别设为f1_input, f2_input 和 f1_input。两个坐标轴的 Tag 属性分别设为 frequency_axes和 time_axes,将来 Callback 函数方便引用,如:handles.frequency_axes 和 handles.time_axes • 选择菜单 Tools/Application Options 设置: • Resize behavior: 为 Proportional • Command-line accessibility: 为 Callback

  35. 第三步:Plot 按纽的 Callback 函数编程 7.6 程序设计举例与习题 function varargout = plot_button_Callback(h, eventdata, handles, varargin) % Get user input from GUI f1 = str2double(get(handles.f1_input,'String')); f2 = str2double(get(handles.f2_input,'String')); t = eval(get(handles.t_input,'String')); % Calculate data x = sin(2*pi*f1*t) + sin(2*pi*f2*t); y = fft(x,512); m = y.*conj(y)/512; f = 1000*(0:256)/512;; % Create frequency plot axes(handles.frequency_axes) % Select the proper axes plot(f,m(1:257)); set(handles.frequency_axes,'XMinorTick','on'); grid on % Create time plot axes(handles.time_axes) % Select the proper axes plot(t,x); set(handles.time_axes,'XMinorTick','on'); grid on

More Related