一个基于Matlab的简单Gui设计

2023-05-16

 前几日浩子说要编一个基于Matlab的用户图像界面,他用GUIDE搭了一个大概的框架,大概要实现数据读入、做图分析、图像清除、关闭界面的功能,我用函数形式给改编了一个,虽然问题比较简单,但是也可以视为Gui设计的一个比较典型的问题,其实用Matlab编界面很简单,只是一个可视化的东西,真正的东西还是里面的程序。

    曾经自学过一段时间的Matlab的Gui界面设计,上学期学电机调速在做大作业的时候为了显得好看,还做了一个界面,这次借用上次的函数框架,一般的函数流程如下:1、建立一个Gui界面,对其中的默认属性进行设置。2、建立菜单栏。3、建立坐标轴区域以便做图。4、放置控件,比如按钮、文本、列表框等等。5、编写相应的回调函数,特别注意其中的配合关系。最后所实现的界面如图1所示。

一个基于Matlab的简单Gui设计

图1 所实现的界面

    根据上面的1、2、3、4步骤建立的对应于图1的函数程序如下所示:

   date:2010年10月21日修改
 author:dingqian
  email:dingqian12345@126.com
%function:基于Matlab的Gui用户图形界面
clc;
clear all;
close all;
delete(findall(0,'type','figure')); %删除所有图像文件
clf reset;

H_figure=figure(1);
set(0,'showHiddenHandles','on');

set(gcf,'unit','normalized'); %位置和坐标轴
set(gcf,'defaultuicontrolunits','normalized');
set(gcf,'defaultuicontrolfontsize',20);
set(gcf,'defaultuicontrolfontname','隶书');
set(gcf,'defaultuicontrolhorizontal','left');
set(gcf,'menubar','none');
str='基于Matlab的用户图形界面设计';
set(gcf,'name',str,'numbertitle','off');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%以上进行系统参数的设置
h_help=uimenu(H_figure,'label','&Help');
h_help_sub1=uimenu(h_help,'label','Author','callback','author','tag','h_sub_1');
h_help_sub2=uimenu(h_help,'label','About','callback','about','tag','h_sub_2');

h_color=uimenu(H_figure,'label','&Color');
h_color_sub1=uimenu(h_color,'label','White','callback','set(h_axes_1,''color'',''white''),set(h_axes_2,''color'',''white''),set(h_color_sub1,''checked'',''on''),set(h_color_sub2,''checked'',''off'')');
h_color_sub2=uimenu(h_color,'label','Yellow','callback','set(h_axes_1,''color'',''yellow''),set(h_axes_2,''color'',''yellow''),set(h_color_sub2,''checked'',''on''),set(h_color_sub1,''checked'',''off'')');

h_grid=uimenu(H_figure,'label','&Grid');
h_grid_sub1=uimenu(h_grid,'label','Grid on','callback','grid(h_axes_1,''on''),grid(h_axes_2,''on''),set(h_grid_sub1,''checked'',''on''),set(h_grid_sub2,''checked'',''off'')');
h_grid_sub2=uimenu(h_grid,'label','Gridoff','callback','grid(h_axes_1,''off''),grid(h_axes_2,''off''),set(h_grid_sub1,''checked'',''off''),set(h_grid_sub2,''checked'',''on'')');
%%%%%%%%%%%%%%%%%%%%%%%%% 以上为菜单的基本建立过程设置 %%%%%%%%%%%%%%%%%%%%%
h_text_1=uicontrol(H_figure,'style','text','string','Automation Department of Njust','position',[0.13 0.93 0.75 0.08],'tag','text_1','fontsize',20,'fontname','newtimes','BackgroundColor',[0.8 0.8 0.8]);
h_axes_1=axes('position',[0.10,0.58,0.6,0.3],'visible','on','tag','axes_1');%建立绘图区域
set(gca,'xtick',[],'ytick',[]);
h_text_2=uicontrol(H_figure,'style','text','string','无连线曲线','position',[0.33 0.88 0.18 0.05],'tag','text_2','fontsize',12,'BackgroundColor',[0.8 0.8 0.8]);
h_axes_2=axes('position',[0.10,0.18,0.6,0.3],'visible','on','tag','axes_2');%建立绘图区域
set(gca,'xtick',[],'ytick',[]);
h_text_3=uicontrol(H_figure,'style','text','string','有连线曲线','position',[0.33 0.48 0.18 0.05],'tag','text_2','fontsize',12,'BackgroundColor',[0.8 0.8 0.8]);
%%%%%%%%%%%%%%%%%%%%%%%%% 以上为图形的模块化的基本设置 %%%%%%%%%%%%%%%%%%%%%
h_text_4=uicontrol(H_figure,'style','text','string','信息显示如右:','position',[0.05 0.05 0.35 0.08],'tag','text_4','BackgroundColor',[0.8 0.8 0.8]);
h_text_5=uicontrol(H_figure,'style','text','string','','position',[0.40 0.05 0.35 0.08],'tag','text_5','BackgroundColor',[0.8 0.8 0.8]);

h_pushbutton_1=uicontrol(H_figure,'style','pushbutton','string','导入数据','position',[0.75,0.78,0.23,0.10],'tag','pushbutton_1','callback','plot_rawdata','BackgroundColor',[0.8 0.8 0.8]);
h_pushbutton_2=uicontrol(H_figure,'style','pushbutton','string','连线处理','position',[0.75,0.45,0.23,0.10],'tag','pushbutton_2','callback','plot_process','BackgroundColor',[0.8 0.8 0.8]);

h_listbox_1=uicontrol(H_figure,'style','popupmenu','string','无次序|有次序','position',[0.75 0.60 0.22 0.06],'tag','AlgrithmType','fontsize',12,'BackgroundColor',[0.8 0.8 0.8]);
h_text_6=uicontrol(H_figure,'style','text','string','选择连线类型','position',[0.75 0.66 0.32 0.08],'tag','text_6','BackgroundColor',[0.8 0.8 0.8],'fontsize',15);
h_pushbutton_3=uicontrol(H_figure,'style','pushbutton','string','清除图像','position',[0.75,0.29,0.23,0.10],'tag','pushbutton_3','callback','Reset','BackgroundColor',[0.8 0.8 0.8]);
h_pushbutton_4=uicontrol(H_figure,'style','pushbutton','string','关闭界面','position',[0.75,0.12,0.23,0.10],'tag','pushbutton_4','callback','close all','BackgroundColor',[0.8 0.8 0.8]);

    关于上述程序,有如下几点需要说明:(1)tag属性是Gui进行传递数据的一个重要途径,所以不能重复。而控件的类型使用style指定。(2)position是控件的位置,其中的四个数据分别对应于左下角横坐标、左下角纵坐标、控件宽度、控件长度,注意控件的位置调整。(3)为了使得界面好看,将Push Button、text等的背景色与figure的背景色一致。(4)注意菜单的强调&和是否选择属性checked。  

    关于回调函数的形式,有两种方式:比较简单的可以直接在callback属性中进行书写,比如关闭界面,直接可以用close all命令实现,值得注意的是,这种形式需要对里面的引号多加一个引号,即先将回调函数用正常的形式写出来,然后对各个语句都套上'',比如正常形式的函数为grid(h_axes_1,'on'),使用回调函数形式即为'callback','grid(h_axes_1,''on'')';对于比较复杂的回调函数,可以使用函数形式,然后在callback属性中填写函数名称即可。

    点击Help菜单下的子菜单Author,调用函数author,出来的信息如图2所示。

一个基于Matlab的简单Gui设计

图2 作者信息

    对应上图的程序如下:

msgbox({'单位:Njust 1002教研室', 'Email:dingqian12345@126.com','Name:DingQian'},'作者信息','help')
h1=findobj('tag','h_sub_1');
h2=findobj('tag','h_sub_2');
set(h1,'checked','on');
set(h2,'checked','off');

    上面的msgbox即为一个信息对话框,函数中的逗号之间分别为信息提示、标题、和图表种类。类似的还有errordlg、warndlg、helpdlg等等。这里需要指出的是如何显示多行信息,是使用单元数组cell,其形式为{'','',''}。

    导入数据的路径查找用如下程序:[FileName,PathName] = uigetfile('*.txt');pathall=strcat(PathName,FileName);这个pathall即为文件的路径。点击导入数据按钮后出现的界面如图3所示。

一个基于Matlab的简单Gui设计

图3 选择文件界面

    文件导入后即可在上面的坐标轴上画出一个无连线的神经元数据曲线(关于神经元数据做图具体见参看文献[2]),在选择连线类型中选择有次序或者无次序类型,这个选择使用弹起式菜单popupmenu,在程序中根据popupmenu的value属性进行做图。点击连线处理按钮之后出来的图像界面如图4所示。根据Color和Grid菜单处理后的界面如图5所示。

一个基于Matlab的简单Gui设计

图4 连线处理点击后界面

一个基于Matlab的简单Gui设计
图5 根据Color和Grid菜单处理后的界面

    清除图像按钮使用cla命令即可。这里有一个问题,即使用cla之后那个坐标轴数据仍然在上面,可以使用set(h_axes1,'xtick',[],'ytick',[])将坐标轴数据隐去。此外还要注意一个问题,就是对于坐标轴等设置的tag属性,在进行plot做图之后,其属性值会改变,这样就不能使用findobj找到正确的句柄了,不过在使用函数所实现的gui界面中,主函数相当于将句柄初始化了,使用首次返回的句柄即可。

    对于属性不清楚的控件,多使用get即可,设置属性使用set。还有一点我猜测的但还没有确定的,就是在对图形对象句柄的属性查看的时候,如果属性值为一个数值,一般情况下为一个图像对象,在进行处理的时候可以先将其句柄返回,再设置属性。比如x0=title('New'),set(gca,'title',x0)。

 

参考文献

[1] 罗华飞 编著.MATLAB GUI设计学习手记[M].北京:北京航空航天大学出版社,2009.

[2] 神经元房室数据做图[EB/OL].http://blog.sina.com.cn/s/blog_4b013fb10100l28h.html.[2010-10-28]. 

 

2010年10月28日晚上于njust 10系 310房间

 

CopyRight:版权所有若需转载或使用请联系作者

Email:dingqian12345@126.com 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个基于Matlab的简单Gui设计 的相关文章

  • 禁止 MATLAB 自动获取焦点[重复]

    这个问题在这里已经有答案了 我有以下问题 在我的 MATLAB 代码中 我使用如下语句 figure 1 更改某些数据的目标数字 问题是 在此 MATLAB 之后 系统将焦点集中在具有该图形的窗口上 当我在后台运行一个大脚本并尝试在计算机上
  • 使用简单矩阵乘法时出错

    我在一次简单的乘法运算中偶然发现了一个错误 这让我感到非常惊讶 我一直以为这里发生了什么 只为矩阵乘法 http www mathworks nl help matlab matlab prog operators html x 2 y z
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • MATLAB 变量传递和惰性赋值

    我知道在 Matlab 中 当将新变量分配给现有变量时 会进行 惰性 评估 例如 array1 ones 1 1e8 array2 array1 的价值array1不会被复制到array2除非元素array2被修改 由此我推测Matlab中
  • 通过颜色渐变修补圆

    我正在尝试绘制一个颜色渐变 我希望它沿轴均匀 在下图由角度定义的情况下 pi 7 当我使用patch命令 绘图与所需的梯度方向匹配 但沿其方向并不均匀 沿圆的点之间形成各种三角形 这是代码 N 120 theta linspace pi p
  • 基本矩阵错误?

    我试图通过扫描从相机拍摄的两个图像 检测图像中的特征 匹配它们 创建基本矩阵 使用相机内在函数计算基本矩阵 然后分解它以找到旋转和翻译 这是matlab代码 I1 rgb2gray imread 1 png I2 rgb2gray imre
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • 在 MATLAB 中验证输入的最佳实践

    在验证 MATLAB 函数中的输入时 什么时候使用 inputParser 比使用断言更好 或者还有其他更好的工具可用吗 我个人发现使用 inputParser 不必要地复杂 对于 Matlab 始终需要检查 3 项内容 存在 类型和范围
  • MATLAB 子图标题和轴标签

    我有以下脚本来最终绘制 4 x 2 子图 files getAllFiles preliminaries n size files cases cell 1 n m cell 1 n for i 1 1 n S load files i c
  • 在 Matlab/Java 中将手部运动建模为 3D 曲线

    我只需要一些关于我遇到的问题 在哪里查看等的指导 我在我的一个项目中使用了运动跟踪手套 它返回每个手指和手掌的 X Y 和 Z 值 我想做的是首先根据这些坐标创建每个手指运动的表示 然后将它们每个附加到手掌的运动 以获得手的表示 一旦我完成
  • 使用正常数据直方图与直接公式进行熵估计(matlab)

    假设我们已经绘制了n 10000标准正态分布的样本 现在我想使用直方图计算其熵来计算概率 1 计算概率 例如使用matlab p x hist samples binnumbers area x 2 x 1 sum p p p area b
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • Matlab 错误:()-索引必须出现在索引表达式的最后

    我有这段代码 想要在制表符分隔的 txt 文件中写入一个数组 fid fopen oo txt wt for x 1 length s fprintf fid s t n s x 1 end fclose fid 但我收到此错误 Error
  • 可以避免迭代元胞数组时的“s{1} 烦恼”吗?

    The s 1 标题的 烦恼 指的是下面的 for 块中的第一行 for s some cell array s s 1 unpeel the enclosing cell do stuff with s end This s s 1 业务
  • 如何从一个清晰的例子计算二维图像中的吉布斯能量

    我有一个关于矩阵的有趣问题 在吉布斯分布中 吉布斯能量U x 可以计算为 这是所有可能的派系 C 上的派系势 Vc x 的总和 右图 团 c 被定义为 S 中站点的子集 x 蓝色像素的邻域是左图中黄色像素的邻居 其中每对不同的站点都是邻居

随机推荐

  • 8.18 模块设计原则:高内聚低耦合

    8 18 模块设计原则 xff1a 高内聚低耦合 模块内聚 定义 xff08 软考 xff09 块内联系 xff1a 模块内各元素的关联 交互程度 从功能角度 xff1a 自己的功能自己实现 xff0c 不麻烦其它模块 如何实现高内聚 功能
  • 9.12 中断(下):中断函数的编写

    9 12 中断 下 xff1a 中断函数的编写 中断特性 可随时打断正在执行的任务 可在任何地方打断正在执行的任务 中断返回后 xff0c CPU不一定重新执行被打断的任务 中断函数 调用时间不固定 xff1a 中断要自己保护现场 调用地点
  • 9.16 内存、外存与外设

    9 16 内存 外存与外设 按速度排列 寄存 缓存 内存 外存 存储分类 内存 又称主存 xff1a CPU能直接寻址的存储空间 存取速度快 包括 xff1a RAM ROM cache等 外存 又称辅存 xff1a 除CPU缓存和内存以外
  • 载波相位测量原理

    1 重建载波 定义 xff1a 载波调制了电文之后变成了非连续的波 xff0c 将非连续的载波信号恢复成连续的载波信号 码相关法 xff1a 方法 将所接收到的调制信号 xff08 卫星信号 xff09 与接收机产生的复制码相乘 技术要点
  • wpa_suplicant 详解 文章收集

    wpa suplicant 详解 文章收集 参考资料 https w1 fi wpa supplicant devel index html https zhuanlan zhihu com p 24246712 https www cnb
  • 玩转AOSP源码编译

    整理搬运一下大佬的文章 https www bilibili com video BV19f4y1r7E6 http liuwangshu cn batcoder aosp 3 compiling aosp html 1 前言 1 1 re
  • Qt 64位链接 mysql8.0 中出现的问题及其解决办法

    1 driver not loaded 原因总结 MinGW编译器中找不到 MySql驱动或者驱动位数不对MinGW编译器找不到 MySql动态库或者动态库有问题代码写的有问题 https blog csdn net l0p0c artic
  • Linux man 手册中各种括号的含义

    尖括号 lt gt 一般用于表示必选项或者参数的占位符 xff0c 实际使用时需要替换成具体的值 方括号 一般用于表示可选项或者参数的占位符 xff0c 实际使用时可以选择是否包含该选项或者参数 大括号 一般用于表示一组选项或者参数 xff
  • 批量创建 markdown 文件的脚本

    写一个 dos脚本 xff0c 其功能是创建 36 个 以 34 Linux内核编程 ch11 sec 34 为开头的 Markdown格式的文件 64 echo off chcp 65001 setlocal enabledelayede
  • libcurl库的http get和http post使用

    一 libcurl中的http get使用方法 1 为什么要使用libcurl 1 作为http的客户端 xff0c 可以直接用socket连接服务器 xff0c 然后对到的数据进行http解析 xff0c 但要分析协议头 xff0c 实现
  • Postman查看完整的请求报文

    第一步 工具栏 View gt Show postman console 第二步 点击 Show Postman Console 之后 就会弹出一个如下图所示的界面 小窍门 postman可以把请求的参数生成代码 可以在代码使用 仅仅只需点
  • 通用异步接收器/发送器(UART)——发送与接收

    图1 带数据总线的UART UART代表通用异步接收器 发送器 它不是像SPI和I2C这样的通信协议 xff0c 而是微控制器中的物理电路或独立的IC UART的主要目的是发送和接收串行数据 关于UART最好的一点是其仅使用两条线在设备之间
  • MYSQL导入数据出现Error 1290:The MySQL server is running with the --secure-file-priv option so it cannot ex

    最近在学习MySQL xff0c 刚入门 xff0c 在导入数据的时候出现了Error 1290 xff1a The MySQL server is running with the secure file priv option so i
  • openmv--无人机通过mavlink实现apriltag定点降落

    span class token comment 无人机通过mavlink实现apriltag定点降落例程 span span class token comment span span class token comment 这个脚本使用
  • [转] 用WWW-Authenticate实现登录验证

    用WWW Authenticate实现登录验证 文章来源 xff1a http www keakon cn bbs thread 1989 1 1 html 今天在研究HTTP协议时发现一个叫WWW Authenticate的头字段 xff
  • ROS--坐标理解

    北东地坐标系 NED north east down 东北天 ENU east north up 机体坐标系 body frame 载体坐标系 是以载体为中心 xff0c 主要作用是处理与传感器直接测得的物理量 导航坐标系 可以是地固坐标系
  • qt 编译qgc常见问题

    qt LINK warning LNK4098 默认库 MSVCRT 与其他库的使用冲突 xff1b 请使用 NODEFAU 如果以前没有问题 xff0c 突然出现的这个问题 xff0c 绝大可能是中间编译过程太多造成的 清理项目 重新构建
  • VINS-FUSION-GPU在jetson nx上的实现

    需要安装经过修改的Ubuntu18系统 https span class token operator span span class token comment developer nvidia com zh cn embedded do
  • 主机ping通虚拟机,虚拟机ping通主机解决方法(NAT模式)

    主机ping通虚拟机 xff0c 虚拟机ping通主机解决方法 xff08 NAT模式 xff09 有时候需要用虚拟机和宿主机模拟做数据交互 xff0c ping不通是件很烦人的事 xff0c 本文以net模式解决这一问题 宿主机系统 xf
  • 一个基于Matlab的简单Gui设计

    前几日浩子说要编一个基于Matlab的用户图像界面 xff0c 他用GUIDE搭了一个大概的框架 xff0c 大概要实现数据读入 做图分析 图像清除 关闭界面的功能 xff0c 我用函数形式给改编了一个 xff0c 虽然问题比较简单 xff