MATLAB 之 对话框设计实例和菜单设计

news2024/12/24 10:18:52

这里写目录标题

  • 一、对话框设计实例
    • 1. 数值转化
    • 2. 图形演示
  • 二、菜单设计
    • 1. 建立用户菜单
    • 2. 菜单对象常用属性
    • 3. 快捷菜单

一、对话框设计实例

  • 在上一篇博客当中,我们介绍了控件的基本操作,这是建立对话框的基础。
  • 下面我们举两个例子,用以说明对话框的应用与设计方法。

1. 数值转化

  • 例如,我们建立一个的 “数值转换” 对话框,在左边输入一个十进制整数和 2~16 之间的数,单击 “转换” 按钮能够在右边得到十进制数所对应的二~十六进制字符串,单击 “退出” 按钮退出对话框。
  • 程序如下:
hf=figure('Color',[0,1,1],'Position',[100,200,400,200],...
    'Name','数制转换','NumberTitle','off','MenuBar','none');
uicontrol(hf,'Style','Text','Position',[80,160,40,20],...
    'Horizontal','center','String','输入框','Back',[0,1,1]);
uicontrol(hf,'Style','Text','Position',[280,160,40,20],...
    'Horizontal','center','String','输出框','Back',[0,1,1]);
uicontrol(hf,'Style','Frame','Position',[20, 65,165,90],'Back',[1,1,0]);
uicontrol(hf,'Style','Text','Position',[25,110,85,25],...
    'Horizontal','center','String','十进制数','Back',[1,1,0]);
uicontrol(hf,'Style','Text','Position',[25,75,85,25],...
    'Horizontal','center','String','2~16进制','Back',[1,1,0]);
hel=uicontrol(hf,'Style','Edit','Position',[100,115,60,25],...
    'Back',[0,1,0]);
he2=uicontrol(hf,'Style','Edit','Position',[100,80,60,25],...
    'Back',[0,1,0]);
uicontrol(hf,'Style','Frame','Position',[215,65,165, 90],'Back',[1,1,0]);
ht=uicontrol(hf,'Style','Text','Position',[255,95,90,30],...
    'Horizontal','center','Back',[0,1,0]);
COMM=['n=str2num(get(hel,''String''));',...
    'b=str2num(get(he2,''String''));',...
    'dec=trdec(n,b);','set(ht,''string'',dec);'];
uicontrol(hf,'Style','Push','Position',[55,20,90,25], ...
    'String','转 换','Call',COMM);
uicontrol(hf,'Style','Push','Position',[255,20,90,30],...
    'String','退 出','Call','close(hf)');
  • 程序中调用了 trdec.m 函数文件,该函数文件的作用是将任意十进制整数转换为二 ∼ \sim 十六进制字符串。
  • 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;
end
k=k-1;
strdec='';
while k>=1                  %形成某进制数的字符串
    kb=p(k);
    strdec=strcat(strdec,ch1(kb+1:kb+1));
    k=k-1;
end
dec=strdec;
  • 程序运行后,整体界面如下图所示。

在这里插入图片描述

  • 此时,我们在输入框的十进制数中输入 2,2~16 进制中输入 2,然后点击转换按钮,得到输出结果如下所示。

在这里插入图片描述

  • 最后,我们单击退出按钮即可关闭对话框。

2. 图形演示

  • 例如,我们建立一个的 “图形演示” 窗口,在编辑框中输入绘图命令,当单击 “绘图” 按钮时,能在左边坐标轴绘制出所对应的图形,下拉列表框提供色图控制,列表框提供坐标网格线和左边边框控制,单击 “关闭” 按钮退出对话框。
clf;
set(gcf,'Unit','normalized','Position',[0.2,0.3,0.5,0.40]);
set(gcf,'Menubar','none','Name','图形演示','NumberTitle','off');
axes('Position',[0.05,0.15,0.5,0.8]);
uicontrol(gcf,'Style','text','Unit','normalized',...
    'Posi',[0.60,0.85,0.2,0.1],'String',...
    '输入绘图命令','Horizontal','center');
hedit=uicontrol(gcf,'Style','edit','Unit','normalized',...
    'Posi',[0.60,0.15,0.2,0.68],...
    'Max',2);           %Max取2,使Max-Min>1,从而允许多行输入
hpopup=uicontrol(gcf,'Style','popup','Unit','normalized',...
    'Posi',[0.83,0.8,0.15,0.15],'String',...
    'Spring|Summer|Autumn|Winter','Call',...
    'comm(hedit,hpopup,hlist)');
hlist=uicontrol(gcf,'Style','list','Unit','normalized',...
    'Posi',[0.83,0.55,0.15,0.25],'String',...
    'Grid on|Grid off|Box on|Box off','Call',...
    'comm(hedit,hpopup,hlist)');
hpush1=uicontrol(gcf,'Style','push','Unit','normalized',...
    'Posi',[0.83,0.35,0.15,0.15],'String',...
    '绘图','Call','comm(hedit,hpopup,hlist)');
uicontrol(gcf,'Style','push','Unit','normalized',...
    'Posi',[0.83,0.15,0.15,0.15],'String',...
    '关闭','Call','close all');
  • 程序中调用了 comm.m 函数文件,其程序如下:
function comm(hedit,hpopup,hlist)
com=get(hedit,'String');
n1=get(hpopup,'Value') ;
n2=get(hlist,'Value') ;
if ~isempty(com)        %编辑框输入非空时
    eval(com');           %执行从编辑框输入的命令
    chpop={'spring','summer','autumn','winter'};
    chlist={'grid on','grid off','box on','box off'};
    colormap(eval(chpop{n1})) ;
    eval(chlist{n2}) ;
end
  • 运行程序后,整体界面如下图所示。

在这里插入图片描述

  • 我们在编辑框中输入如下程序。
t=0:pi/10:pi;
r=2+sin(t);
[x,y,z]=cylinder(r,30);
surf(x,y,z);
  • 色图选择为 Winter,有网格线,有边框线,得最后结果如下图所示。

在这里插入图片描述

二、菜单设计

  • MATLAB 用户菜单对象是图形窗口的子对象,所以菜单设计总在图形窗口中进行。
  • MATLAB 的图形窗口有自己的菜单栏,为了建立用户自己的菜单系统,可以先将图形窗口 MenuBar 属性设置为 none,以取消图形窗口默认的菜单,然后再建立用户自己的菜单。

1. 建立用户菜单

  • 用户菜单通常包括一级菜单(菜单条)和二级菜单,有时根据需要还可以往下建立子菜单(三级菜单等),每一级菜单又包括若干菜单项。要建立用户菜单可用 uimenu 函数,因其调用方法不同,该函数可以用于建立一级菜单项和子菜单项。
  • 建立一级菜单项的函数调用格式如下:
	句柄变量=uimenu(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,...)
  • 建立子菜单项的函数调用格式如下:
	句柄变量=uimenu(一级菜单项句柄,属性名1,属性值1,属性名2,属性值2,...)
  • 这两种调用格式的区别在于,建立一级菜单项时,要给出图形窗口的句柄。如果省略了这个句柄,MATLAB 就在当前图形窗口中建立这个菜单项。
  • 如果此时不存在活动图形窗口,MATLAB 会自动打开一个图形窗口,并将该菜单项作为它的菜单对象。在建立子菜单项时,必须指定一级菜单项对应的句柄。例如:
	hm=uimenu(gcf,'Label','File');
	hm1=uimenu(hm,'Label','Save');
	hm2=uimenu(hm,'Label','save As');
  • 将在当前窗口菜单条中建立名为 File 的菜单项。其中,Label 属性值 File 就是菜单项的名字,hm 是 File 菜单项的句柄,供定义该菜单项的子菜单之用。后两条命令将在 File 菜单项下建立 Save 和 Save As 两个子菜单项。具体界面如下图所示。

在这里插入图片描述

2. 菜单对象常用属性

  • 菜单对象除具有 Children、Parent、Tag、Type、UserData、Visible 等公共属性外,还有一些常用的特殊属性。
  • (1) Label 属性:该属性的取值是字符串,用于定义菜单项的名字。可以在字符串中加入 & 字符,这时在该菜单项名字上,跟随 & 字符后的字符有一条下划线,& 字符本身不出现在菜单项中。对于这种有带下划线字符的菜单,可以用 Alt 键加该字符键来激活相应的菜单项。
  • (2) Accelerator 属性:该属性的取值可以是任何字母,用于定义菜单项的快捷键。如取字母 W,则表示定义快捷键为 Ctrl+W。
  • (3) CallBack 属性:该属性的取值是字符串,可以是某个脚本文件名或一组 MATLAB 命令。在该菜单项被选中以后,MATLAB 将自动调用此回调函数来作出对相应菜单项的响应,如果没有设置一个合适的回调函数,则此菜单项也将失去其应有的意义。
  • 在产生子菜单时 CallBack 属性也可以省略,因为这时直接打开下一级菜单,而不是侧重于某一操作。
  • (4) Checked 属性:该属性的取值是 ‘on’ 或 ‘off’(默认值),该属性为菜单项定义一个指示标记,可以用这个特性指明菜单项是否已选中。
  • (5) Enable 属性:该属性的取值是 ‘on’(默认值)或 'off ',这个属性控制菜单项的可选择性。如果它的值是 'off ',则此时不能使用该菜单。此时,该菜单项呈灰色。
  • (6) Position 属性:该属性的取值是数值,它定义一级菜单项在菜单条上的相对位置或子菜单项在菜单组内的相对位置。例如,对于一级菜单项,若Position属性值为1,则表示该菜单项位于图形窗口菜单条的可用位置的最左端。
  • (7) Separator 属性:该属性的取值是 ‘on’ 或 ‘off’(默认值)。如果该属性值为 ‘on’,则在该菜单项上方添加一条分隔线,可以用分隔线将各菜单项按功能分开。
  • 例如,我们建立图形演示系统,系统菜单条中含有 3 个菜单项:Plot、Option 和 Quit。Plot 菜单项中有 Sine Wave 和 Cosine Wave 两个子菜单项,分别控制在本图形窗口画出正弦和余弦曲线。Option 菜单项的内容如下图所示,其中 Grid on 和 Grid off 子菜单项控制给坐标轴加网格线,Box on 和 Box off 子菜单项控制给坐标轴加边框,而且这 4 项只有在画曲线时才是可选的。Window 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.5*W,0.3*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,''Enable'',''on'');',...
    'set(hgoff,''Enable'',''on'');',...
    'set(hbon,''Enable'',''on'');',...
    'set(hboff,''Enable'',''on'');']);
uimenu(hplot,'Label','Cosine Wave','Callback',...
    ['t=-pi:pi/20:pi;','plot(t,cos(t));',...
    'set(hgon,''Enable'',''on'');',...
    'set(hgoff,''Enable'',''on'');',...
    'set(hbon,''Enable'',''on'');',...
    'set(hboff,''Enable'',''on'');']);
%定义option菜单项
hoption=uimenu(gcf,'Label','&option');
hgon=uimenu(hoption,'Label','&Grid on',...
    'Callback','grid on','Enable','off');
hgoff=uimenu(hoption,'Label','&Grid off',...
    'Callback','grid off','Enable','off');
hbon=uimenu(hoption,'Label','&Box on', ...
    'separator','on','Callback','box on','Enable','off');
hboff=uimenu(hoption,'Label','&Box off',...
    'Callback','box off','Enable','off');
hwincor=uimenu(hoption,'Label','&Window Color','Separator','on');
uimenu(hwincor,'Label','&Red','Accelerator','r',...
    'Callback','set(gcf,''color'',''r'');');
uimenu(hwincor,'Label','&Blue','Accelerator','b',...
    'Callback','set (gcf,''color'',''b'');');
uimenu(hwincor,'Label','&Yellow','Callback',...
    'set(gcf,''color'',''y'');');
uimenu(hwincor,'Label','&white','Callback',...
    'set(gcf,''color'',''w'');');
%定义Quit菜单项
uimenu(gcf,'Label','&Quit','Callback','close(gcf)');
  • 程序运行后,整体界面如下图所示。

在这里插入图片描述

  • 然后,我们选择 Plot ⟶ \longrightarrow Sine Wave 命令、Option ⟶ \longrightarrow Grid on 命令、Option ⟶ \longrightarrow Window Color ⟶ \longrightarrow Yellow 命令后,系统运行界面如下图所示。

在这里插入图片描述

3. 快捷菜单

  • 快捷菜单是用鼠标右键单击某对象时在屏幕上弹出的菜单。这种菜单出现的位置是不固定的,而且总是和某个图形对象相联系。
  • 在 MATLAB 中,可以使用 uicontextmenu 函数和图形对象的 UlContextMenu 属性来建立快捷菜单,具体步骤如下:
  • (1) 利用 uicontextmenu 函数建立快捷菜单。
  • (2) 利用 uimenu 函数为快捷菜单建立菜单项。
  • (3) 利用 set 函数将该快捷菜单和某图形对象联系起来。
  • 例如,我们绘制 y = 2 e − 0.5 x sin ⁡ ( 2 π x ) y=2e^{-0.5x}\sin (2\pi x) y=2e0.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','虚线','Callback','set (hl,''LineStyle'','':'');');
uimenu(hls,'Label','实线','Callback','set (hl,''LineStyle'',''-'');');
uimenu(hlw,'Label','加宽','Callback','set (hl,''LineWidth'',2);');
uimenu(hlw,'Label','变细','Callback','set (hl,''LineWidth'',0.5);');
set(hl,'UIContextMenu',hc);  %将该快捷菜单和曲线对象联系起来
  • 程序运行后,整体界面如下图所示。

在这里插入图片描述

  • 此时是按默认参数(0.5 磅实线)画线。
  • 我们将鼠标指针指向线条并右击,则弹出快捷菜单,如下图所示,选择菜单命令可以改变线型和曲线宽度。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试工程师最常用的Linux系统命令大全(汇总)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 cd命令 这是一个…

最新导则下生态环评报告编制技术

根据生态环评内容庞杂、综合性强的特点,依据生态环评最新导则,将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、 10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量…

开窗函数之聚合、取特定值、排名

一, 聚合开窗函数sum(score) over(partition by name ) 二,开窗函数之first_value,last_value,lead,lag 三,排名开窗函数ROW_NUMBER、DENSE_RANK、RANK 一,开窗函数的语法 开窗函数的语法为&am…

Pinia理解【Vue3】

什么是Pinia Pinia是Vue的专属的最新状态管理库,是Vuex状态管理工具的替代品 优势: 提供了更加简单的API (去掉了mutation)提供符合组合式风格的API(和Vue3新语法统一)去掉了 modules 的概念,每一个 store 都是一个独立的模块搭配 TypeScr…

RabbitMQ Exchange类型和工作模式介绍

RabbitMQ Exchange类型和工作模式介绍 一RabbitMQ Exchange类型1.1.Fanout1.2.Direct1.3.Topic1.4.Headers 二 RabbitMQ 工作模式介绍2.1.work工作模式(资源的竞争)2.2.publish/subscribe发布订阅(共享资源)2.3.routing路由模式应用--direct交换器 2.4.topic 主题模式(路由模式…

一键轻松造数据:通过Postman实现表单提交

一、原始需求的诞生 在测试的过程中,需要大量的表单。于是我选择了通过postman发送表单提交的接口来造数据。 如上图所示,表单提交接口所需的参数以及请求体中需模拟的IP地址。参数为 {{}} 的表示需要不同的实参,至于原因就不在这里赘述了。如…

618手机大战:各大品牌花式秀战报,但难掩冷淡行情

在手机出货量持续下行的态势下,各大手机厂商普遍对618这个年中大促寄予厚望,希望通过各种促销手段,扭转销售颓势。 比如,今年5月下旬,小米、荣耀、OPPO、vivo等厂商就已经开启了降价、分期免息等优惠活动,…

Vue3自定义指令实现按钮权限

一、需求前提 登录成功后,后端直接返回了用户的所有权限(路由权限按钮权限),在已经实现菜单权限的基础上,实现每个页面的按钮权限,树形数据结构如下: { "roles": ["admin&q…

嵌入式实时操作系统的设计与开发New(六)

aCoral的优先级与数字大小成反比,即:数字越大,优先级越低。 #define MAX_PRIO_NUM ((CFG_MAX_THREAD1) & 0xff) #define MINI_PRIO CFG_MAX_THREAD //最低优先级40typedef enum{ACORAL_INIT_PRIO; //init线程独有的0优先级ACORAL_MAX_PR…

如何刷新 DNS 缓存 (macOS, Linux, Windows)

如何刷新 DNS 缓存 (macOS, Linux, Windows) Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows) 请访问原文链接:https://sysin.org/blog/how-to-flush-dns-cache/,查看最新版。原创作品,转载…

论文解读|基于平面双关节机器人的相机姿态分析与评估

原创 | 文 BFT机器人 01 研究内容 论文的主要研究内容是基于平面双关节机器人的相机姿态分析和评估。研究旨在分析相机的位置调整和一般数据分析,讨论人体姿势的平衡、关节运动的控制以及相机速率的估计和控制。 通过有限相机技术的应用,有效解决平面摄影…

【虚拟机数据恢复】XenServer虚拟机磁盘数据被破坏的数据恢复案例

虚拟机数据恢复环境: 一台某品牌720服务器,4块STAT硬盘通过RAID卡组建raid10磁盘阵列。部署的XenServer虚拟化平台Windows Server操作系统,共两个虚拟磁盘:数据盘系统盘。服务器作为Web服务器使用,上层部署ASP SQL Se…

Chrome插件开发_V3_浏览器扩展插件基础教程

文章目录 一、简介二、核心介绍三、自定义页面背景色三、设置页面背景图(web_accessible_resources)四、设置徽章(Badge)五、桌面通知六、消息通信七、自定义右键菜单(添加、更新、删除)八、Omnibox九、浏览…

JVM基础知识

JVM 一次编译终身运行1.1 JVM和java的体系结构1.1.1 虚拟机与JAVA虚拟机1.1.2 JVM的位置1.1.3 JVM的整体执行流程1.1.4 JAVA代码的执行流程1.1.5 JVM架构模型1.1.6 JVM的生命周期1.1.7 Sun Classic Vm1.1.8 Exact VM1.1.9 Hotspot VM1.1.10 BEA的JRockit1.1.11 IBM的 J91.1.12 …

云渲染是什么?如何挑选云渲染平台

在影视动画、建筑设计、游戏开发等领域,渲染是一个非常重要的环节,它可以将场景、模型、纹理、材质等元素综合起来,生成逼真的图像或视频。然而,渲染也是一个非常耗时和耗能的过程,它需要大量的计算资源和硬件设备&…

Intel base instruction -- Jcc

检查EFLAGS寄存器中一个或多个状态标志(CF、of、PF、SF和ZF)的状态,如果这些标志处于指定状态(条件),则执行跳转到目标操作数指定的目标指令。条件代码(cc)与每个指令相关联&#xf…

实用干货-汇总篇

_ 实用干货 _ 11.实用干货-基因&基因组知识回顾 (qq.com)22.实用干货—解惑NGS可能引入的错误突变 (qq.com)33.临床肿瘤NGS的常规检测流程 (qq.com)44.实用干货—DNA甲基化相关知识点整理 (qq.com)55.实用干货-NGS的QC质控和突变结果复核 (qq.com)65.实用干货-你可能没…

patch 报错 can‘t find file to patch at input line 4

错误现象&#xff1a; 解决 -p3 patch -p3 < ../speccpu2006-kylinv10-aarch64.patch

问题总结,web自动化测试元素无法操作?shadowDOM节点元素解决......

前言 web自动化遇到shadowDOM你会操作吗&#xff1f; 之前在做web自动化的时候&#xff0c;发现页面上有些元素&#xff0c;在selenium中无法通过xpath来定位&#xff0c;各种原因找了半天都没找到解决方案&#xff0c;最后发现元素在一个叫做shadow-root的节点下面&#xff…

消息通知系统设计

编辑导语&#xff1a;消息通知可以将内容实时送达用户手机页面&#xff0c;但是泛滥的消息通知会引起用户的反感&#xff0c;也违背了这个设计的初衷。如何理解以及设计消息通知&#xff0c;作者作了简单的分享&#xff0c;我们一起来看看吧。 消息通知可以及时地将状态、内容…