专题八图形窗口与坐标轴-2

简介: 专题八图形窗口与坐标轴

三、图形用户界面设计方法

1、图形用户界面的组成

(1)图形用户界面GUI(Graphical User Interface):用户与计算机进行信息交流的窗口。

(2)设计图形用户界面的方法

  • 调用建立用户界面控件的函数
  • 使用MATLAB提供的GUIDE工具进行可视化设计


2、控件对象及其操作

(1)常用控件

  • 输入和输出类控件:编辑框、静态文本、列表框、滑动条等。
  • 实施确认、选择操作类控件:按钮、双位按钮、单选按钮、复选框。

(2)建立控件对象

句柄变量=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,……)

其中,属性及其取值决定了控件的特征。若省略图形窗口句柄,默认在当前图形窗口建立控件对象。

(3)控件对象的基本控制属性

  • Style属性:定义控件对象的类型,例如‘pushbutton’表示按钮对象,‘edit’表示编辑框。
  • String属性:定义控件对象的说明文字。
  • Tag属性:标识控件对象。
  • Enable属性:控制控件对象是否可用。
  • Position属性:定义控件对象的位置,其取值形式为[x,y,w,h]。
  • Callback属性:其属性值是描述命令的字符串或函数句柄,当选中控件时,系统将自动执行字符串描述的命令或调用句柄所代表的函数,实施相关操作。

例子:在图形窗口建立三个按钮对象,当单机按钮时分别绘制正弦曲线、显示或隐藏坐标轴的网络、清楚坐标轴的图形。

ha=axes('Units','pixels','Position',[40,40,360,360]);
btgrid=uicontrol('Style','pushbutton','String','网格',...
    'Position',[450,120,48,20],...
    'Callback','grid');%grid显示或隐藏坐标轴的网络
btncla=uicontrol('Style','pushbutton','String','清除',...
    'Position',[450,80,48,20],...
    'Callback','cla');%cla清除坐标轴
btplot=uicontrol('Style','pushbutton','String','绘图',...
    'Position',[450,160,48,20]);
btplot.Callback=@plot_sin;%绘图

建立回调绘图函数文件plot_sin.m

function plot_sin(source,callbackdata)
t=-pi:pi/20:pi;
plot(t,sin(t));
end

注:回调函数定义格式

function 函数名(source,evendata)

……

end

其中,参数source是发生事件的源控件对象句柄,evendata存储事件数据。


3、菜单对象

(1)建立菜单对象

uimenu函数用于创建、设置、修改菜单

  • 建立一级菜单项的函数调用格式
    一级菜单项句柄=uimenu(图形窗口句柄,属性,属性值1,属性2,属性值2,……)
  • 建立子菜单项的函数调用格式:
    子菜单项句柄=uimenu(上级菜单项句柄,属性,属性值1,属性2,属性值2,……)

(2)菜单属性

  • Label属性:定义菜单项的名字。
  • Accelerator属性:定义菜单项的快捷键
  • Checked属性:指示菜单项是否已选中
  • Enable属性:控制菜单项的可选性
  • Separator属性:在菜单项上方添加一条分割线

例子:在上例的界面中添加“图形选项”菜单项,其中包括一个二级菜单项“线型”,其下又有3个子菜单项,分别为“实线”、“虚线”、“双划线”。

主程序

%建立坐标轴
ha=axes('Units','pixels','Position',[40,40,360,360]);
%grid显示或隐藏坐标轴的网络
btgrid=uicontrol('Style','pushbutton','String','网格',...
    'Position',[450,120,48,20],...
    'Callback','grid');
%cla清除坐标轴
btncla=uicontrol('Style','pushbutton','String','清除',...
    'Position',[450,80,48,20],...
    'Callback','cla');
%绘图
btplot=uicontrol('Style','pushbutton','String','绘图',...
    'Position',[450,160,48,20]);
btplot.Callback=@plot_sin;
%一级菜单项
hopt=uimenu(gcf,'Label','图形选项','Accelerator','L');
%建立二级菜单项,包括实线、虚线、双划线
hLStyle=uimenu(hopt,'Label','选项','Tag','LStyle','Enable','off');Enable为off菜单不可用
hL_Solid=uimenu(hLStyle,'Label','实线','Tag','Solid','Callback',@MLine_Type);
hL_Dotted=uimenu(hLStyle,'Label','虚线','Tag','Dotted','Callback',@MLine_Type);
hL_Dashed=uimenu(hLStyle,'Label','双划线','Tag','Dashed','Callback',@MLine_Type);

函数文件plot_sin.m

function plot_sin(source,callbackdata)
t=-pi:pi/20:pi;
plot(t,sin(t));
h1=findobj('Tag','LStyle');
h1.Enable='On';%将Tag属性为LStyle的Enable改为on,使得 “线型”菜单项可用
end

函数文件MLine_Type.m

function MLine_Type(source,callbackdata)
hline=findobj('Type','line');%返回类型为线型的对象
if strcmp(source.Tag,'Solid')==1%strcmp字符比较函数
    hline.LineStyle='-';
elseif strcmp(source.Tag,'Dotted')==1
    hline.LineStyle=':';
elseif strcmp(source.Tag,'Dashed')==1
    hline.LineStyle='--';
end
end

程序运行结果,运行主程序生成图形界面,此时菜单中“图形选项”下的“选项”不可用。单机“绘图”按钮绘制曲线之后,“选项”可用,这时可以改变线型。


四、用户界面设计工具

1、图形界面设计窗口

(1)打开GUIDE

  • 在MATLAB命令行窗口输入guide命令
  • 在MATLAB主窗口中选择“主页”选项卡,单击工具栏的“新建”命令按钮,再选择“应用程序”下的GUIDE命令。

(2)图形用户界面设计模板

  • Blank GUI(Default)
  • GUI with Uicontrols
  • GUI with Axes and Menu
  • Modal Question Dialog

(3)图形用户界面设计窗口

图形用户界面设计窗口由菜单栏、工具栏、组件选项板、界面设计区、状态栏等部分组成。


例子:建立一个图形用户界面,该界面包括一个坐标轴,3个静态文本,3个可编辑文本,2个按钮。还有一个按钮组,里面有两个单选按钮。


2、图形用户界面设计工具

从左到右依次是:

对齐对象工具、菜单编辑器、Tab键顺序编辑器、工具栏编辑器、代码编辑器、对象属性检查器、对象浏览器。

(1)对象属性检查器

用于检查/修改对象属性的工具

(2)菜单编辑器

(3)对象浏览器

用于查看图形对象和展示界面的组织架构。


3、回调属性与回调函数

(1)回调属性

  • Callback属性:按钮类控件和菜单项的单击事件的默认回调属性。
  • CreateFcn属性:定义创建图形对象的响应。
  • DeleteFcn属性:定义取消图形对象的响应。
  • ButtonFcn属性:定义单击鼠标键按下的响应。
  • KeyPressFcn属性:定义键盘键按下的响应。
  • SelectionChangeFcn属性:定义改变选项的响应。


(2)回调函数框架

function 对象标识_Callback(hObject,eventdata,handles)

,其中,hObject为发生事件的源控件,eventdata为事件数据,handles保存图形界面中所有对象的句柄。


(3)回调函数举例

  • “绘图”按钮的Callback
function pushbutton1_Callback(hObject, eventdata, handles)
A=eval(handles.editfz.String);
f=eval(handles.editpl.String)/50;
theta=eval(handles.editxj.String)/180*pi;
x=linspace(0,2*pi,100);
if handles.Opsin.Value==1%判断是选择sin还是cos函数
    y=A*sin(f*x+theta);
else
    y=A*cos(f*x+theta);
end
plot(x,y);
handles.PStyle.Enable='On';
  • “实线”菜单的回调函数(虚线,双划线类似)
function Soild_Callback(hObject, eventdata, handles)
hline=findobj('Type','line');
hline.LineStyle='-';
handles.Solid.Checked='On';%指示菜单已经选中
handles.Dotted.Checked='Off';
handles.Dashed.Checked='Off';
  • “红色”菜单的回调函数
function r_Callback(hObject, eventdata, handles)
hline=findobj('Type','line');
hline.Color='r';
handles.r.Checked='On';%指示菜单已经选中
handles.g.Checked='Off';
handles.b.Checked='Off';

成果图


目录
相关文章
|
存储 设计模式 容器
专题八图形窗口与坐标轴-3
专题八图形窗口与坐标轴
138 0
|
5月前
Qt绘图(线条、椭圆、矩形、图片滚动)
Qt绘图(线条、椭圆、矩形、图片滚动)
343 3
|
6月前
LabVIEW当鼠标悬停在图形曲线上时显示坐标
LabVIEW当鼠标悬停在图形曲线上时显示坐标
88 1
|
存储
专题八图形窗口与坐标轴-1
专题八图形窗口与坐标轴
77 0
|
移动开发 HTML5
使用三次贝塞尔曲线绘制弧形菜单
使用三次贝塞尔曲线绘制弧形菜单
R绘图 | 圆角堆叠柱状图(ggchicklet )
R绘图 | 圆角堆叠柱状图(ggchicklet )
300 0
R绘图 | 圆角堆叠柱状图(ggchicklet )
SwiftUI—通过Path路径绘制不规则的线条和图形
SwiftUI—通过Path路径绘制不规则的线条和图形
641 0
SwiftUI—通过Path路径绘制不规则的线条和图形