专题八图形窗口与坐标轴-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';

成果图


目录
相关文章
|
关系型数据库 MySQL Linux
Linux在线安装MySQL8
Linux在线安装MySQL8
479 0
|
运维 监控 安全
实时计算 Flink 版最佳实践测评
本文介绍了结合电商平台用户行为数据的实时计算Flink版实践,涵盖用户行为分析、标签画像构建、业务指标监控和数据分析预测等场景。文章还对比了实时计算Flink版与其他引擎及自建Flink集群在稳定性、性能、开发运维和安全能力方面的差异,分析了其成本与收益。最后,文章评估了实时计算Flink版的产品内引导、文档帮助、功能满足情况,并提出了针对不同业务场景的改进建议和与其他产品的联动可能性。
323 2
|
机器学习/深度学习
多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比
多维时序 | Matlab实现LSTM-Adaboost和LSTM多变量时间序列预测对比
|
11月前
|
存储 人工智能 算法
加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统 | 2024龙蜥大会主论坛
本次方案的主题是加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统,从产业洞察、创新实践、发展建议三个方面,指出 AI 原生应用对操作系统提出更高要求,需要以应用为导向、以系统为核心进行架构创新设计,要打造最 AI 的服务器操作系统。 1. 产业洞察 2. 创新实践 3. 发展建议
390 6
|
网络协议 关系型数据库 Linux
手把手教你使用phpstudy本地快速搭建网站,并外网访问【无公网IP】
手把手教你使用phpstudy本地快速搭建网站,并外网访问【无公网IP】
|
存储 NoSQL 大数据
【大数据】LSM树,专为海量数据读写而生的数据结构
【大数据】LSM树,专为海量数据读写而生的数据结构
842 0
|
机器学习/深度学习 人工智能 搜索推荐
详细探讨AI在个性化教育平台中学习路径推荐的应用
详细探讨AI在个性化教育平台中学习路径推荐的应用
|
存储 人工智能 安全
《芯片战争》读后感-得芯片者得天下
随着社会的进步和技术的发展,以互联网产业化、人工智能等为代表的第四次工业革命席转全球,人工智能技术如火如荼,将整个世界推入了智能化时代。有人说石油是现在工业的血液,那么芯片就是现代工业的大脑。芯片作为现代工业的大脑,它们被广泛应用于各种电子设备、通信、计算机、人工智能等领域。在现代电子设备中发挥着核心的作用。芯片可以控制和操作各种电子设备,执行复杂的运算和数据处理任务,实现各种智能化的功能。随着科技的进步和数字化转型的加速,芯片在各个领域的应用越来越广泛,从计算机、手机、汽车到航空航天、医疗、国防等各个领域,都离不开芯片的支持和推动,半导体芯片在现代技术和工业中的重要性无法被低估。
625 0
|
机器学习/深度学习 Ubuntu Linux
操作系统实验一到实验九合集(哈工大李治军)(三)
操作系统实验一到实验九合集(哈工大李治军)(三)
797 0
操作系统实验一到实验九合集(哈工大李治军)(三)
|
人工智能 算法 安全
游戏人工智能——A*寻路算法实践
A*寻路算法实践 一、题目背景 随着多媒体设备、虚拟现实、增强现实、物联网等技术的飞跃发展,计算速度与存储容量的日益提高以及相关软件的研究取得长足进步,人工智能的应用得以进一步推广发展起来。地图寻径问题是人工智能技术的一个重要领域。在网络游戏中,寻径问题必须考虑多方面的因素,比如游戏地图中文件结构和起点与目标点之间是否可以连通以及游戏运行时运行内存资源占用、可扩展更新性、安全程度等。长久以来,游戏开发者在开发过程中为了实现这些绞尽脑汁。 在搜索寻径问题中,Dijkstra算法是目前许多工程解决最短路径
642 0
游戏人工智能——A*寻路算法实践