matlab table中的文字转string_MATLAB_GUI_教程(2)pushbutton

目录

前言上期教程按钮介绍按钮(pushbutton)如何在窗口中创建一个按钮常用属性常用属性练习回调函数的编写规则设置回调函数:定义(编写)回调函数:NoteGUI中各个回调函数之间数据的传递setappdatagetappdata方法按钮的回调函数

前言

上期教程

按钮介绍

这个按钮是GUI界面中用的最多的一个控件了,上期教程中的GUI界面中的元素一图中列出了10个UI控件,按钮(pushbutton)就是其中的第一个。这些UI控件的基本属性都一样,所以本期讲完了按钮的常用的属性后,后面那些按钮的属性就不详细展开讲了。

这个按钮和开关不一样,对于按钮你点一下后就会弹回原来的状态。如果是开关的话,你按一下,他会一直保持你按下之后的状态,直到你再次按下开关后才会变回原来的状态,这个开关对应的UI控件是togglebutton(切换按钮)。

按钮(pushbutton)

如何在窗口中创建一个按钮

function main()

close all
%% 创建主窗口, 打三个点可以换行书写,一行写多了不太好
h_fig = figure('Name', 'MATLAB_GUI_教程(2)pushbutton', ...
    'MenuBar', 'none', ...
    'ToolBar', 'none');

%% 创建一个按钮
btn = uicontrol('Style', 'pushbutton', 'Parent', h_fig);

end

如你所见,这里是用uicontrol函数来创建按钮的。uicontrol函数就是用来创建UI控件的,该函数返回创建出来的控件的句柄

  • UI控件的Style属性是用来控制UI控件的类型

  • UI控件的Parent属性是用来控制该控件放在哪里(此处是直接放在主窗口中)

还记得上篇教程中说的用下面这种方式来设置控件的属性么:

btn = uicontrol('属性1', '值1', '属性2', '值2', '属性3', '值3');

我们在创建UI控件时比较习惯用这种方式来创建,当然你也可以像下面这样来创建,不过我看着比较别扭:

%% 创建一个按钮
btn = uicontrol;
btn.Parent = h_fig;
btn.Style = 'pushbutton';

上面那个创建的结果如下:

a98f160d0bae904b1b0256e018622389.png
图1

常用属性

这里常用属性这里不包括按钮的那些回调函数,回调函数那些单独说。

上面已经认识了按钮的两个属性了,其实我觉得不应该说是按钮的属性,应该说是UI控件的属性,因为这个按钮只是当UI控件的Style属性为'pushbutton'时的情况。

和figure一样,按钮也有很多属性,我们不可能把他们都记住,顶多记几个常用的就行了。我以前初学时连常用的都时常记不住,那怎么办呢,怎么知道它有那些属性呢,以及怎么知道相应的属性应该设置哪些值呢。其实这些在上期推送中就已经讲过了:

  1. 直接在matlab命令行中输入下面一行代码,注意不要打分号,这样可以输出有哪些属性:

btn = uicontrol

结果如下:

8cdc52bf02c35881bf10186ede7f4f0c.png
图2

实际上它给我们显示出来的这些就是常用的属性,不过下面我会多添加几个:

  • Style:控制UI控件的类型,默认为'pushbutton',在创建按钮时可以不下,但最好还是在创建时写上它。

  • Parent:控制UI控件的父容器,通俗的说就是告诉UI控件该放在谁上面(直接的关系),目前还没讲布局,就只能直接放在figure上,当讲了布局后,这些控件都放在布局里面。虽然布局还是直接或者间接地放在figure中。为了说明按钮放在哪里,所以这个Parent属性必须写(虽然有时不写也行)。

  • String:显示在按钮(UI控件)上的字符串。

  • Tag:按钮(UI控件)的ID,就跟我们的身份证一样。这个在GUIDE中用的多,在GUIDE中通过handles.tag可以获取相应的控件,在纯代码编写GUI时多用于fandobj函数。这个就不细讲了,知道存在这么个东西就好。

  • BackgroundColor:设置按钮的背景色,可以是表示颜色的字母如:'k', 'r', 'g', 'b'等,也可以是1*3的向量,每个元素在0-1之间代表r,g,b的值。

  • ForegroundColor:按钮上的字符串(String)的颜色

  • FontSize:按钮上的字符(String)的大小

  • FontName:按钮上的字符(String)的字体

  • Visible:控制该按钮是否可见,默认是可见的

  • Units:控制按钮的Position的值的单位,常用像素为单位:'pixels',如果要设置单位,那么单位一定要在Position之前设置。

  • Position:控制按钮在窗口中的位置。以电脑屏幕为坐标平面的话,那么电脑屏幕的左下角点就是原点,position的值为:[x, y, w, h]:

1b9d76e05930ae5785d05126ba240659.png
图3

实际上通常,也就用:Style, Parent, String, Units, Position, 以及后面讲的callback。如果在熟悉了 布局 之后,连Units和Position都用不上。

  1. 获取属性可以设置哪些属性值的方法还是和上期推送一样。不过在UI控件这,好多属性你这样无法获取某属性可以设置哪些值,此时就要去帮助文档中看看了:

960da8e79715519969aa950ebdd3aa20.png
图4

常用属性练习

在一个窗口中放一个宽400,高100的按钮,按钮上的文字为:I'm Mith Hong。文字的颜色为红色,文字的大小为18,按钮的背景色为黑色。

function main()

close all
%% 创建主窗口
h_fig = figure('Name', 'MATLAB_GUI_教程(2)pushbutton', ...
    'MenuBar', 'none', ...
    'ToolBar', 'none');

%% 创建一个按钮
btn = uicontrol('Style', 'pushbutton', ...
    'Parent', h_fig, ...
    'String', 'I''m Mitch Hong', ...
    'FontSize', 18, ...
    'ForegroundColor', 'r', ...
    'BackgroundColor', 'k', ...
    'Units', 'pixels', ...
    'Position', [50 50 400 100]);

end

结果如下:

2c65056bcd6d43cffc8c6a1220815b49.png
图5

回调函数的编写规则

设置回调函数:

uicontrol('Callback',{@btn_callback,input1,input2,…})

其中回调函数名为btn_callback,@btn_callback表示获取该回调函数的句柄;input1,input2,….为向callback中传入实际参数;把他们用大括号括起来构成一个细胞数组作为Callback的属性值。

回调函数的名字可以任意取,但是要有意义。

定义(编写)回调函数:

function btn_callback(obj,eventdata,input1,input2)

其中obj与eventdata必须要有而且顺序不能颠倒,如果函数体内用不上可以把这两个位置用 ~ 来替换掉,从第三个位置开始按顺序接受需要的输入。

obj表示当前你所点击的那个UI控件的句柄,event是一个事件,通常在uitable那用的多,这里先不解释。

不要问为什么,这是规则,记就完事了。

Note

好像在16版开始,才能在同一个m文件中写多个函数,如果是14版的,需要把回调函数单独写成一个文件!

GUI中各个回调函数之间数据的传递

setappdata

利用setappdata把数据保存到figure的appdata中:

setappdata(h_fig, 'myData1', data1)

其中data1是我们的数据,这样就能把data1保存到figure的appdata中的myData1里面了。

getappdata

利用getappdata从figure的appdata中获取数据:

data1 = getappdata(h_fig, 'myData1');

方法

因此我们只需要向各个回调函数中传递主窗口的句柄即可,这样就能在不同的回调函数中传递数据了。

另外,一般我比较习惯把数据变量的名字和appdata中的名字写成相同的,即:

setappdata(h_fig, 'data1', data1)
data1 = getappdata(h_fig, 'data1');

如果不太明白的话,看看下面的例子就明白了。

按钮的回调函数

这个在上面的回调函数的编写规则中已经讲了,这里就直接来个例子了。

例:在一个窗口中创建4个按钮,在上面标号为1,2,3,4,

  • 点击按钮1时,隐藏按钮2,显示按钮3

  • 点击按钮3时,隐藏按钮1,显示按钮2

  • 点击按钮2时,显示按钮1,隐藏按钮3

  • 点击按钮4时,都显示

function main()

close all
%% 创建主窗口
h_fig = figure('Name', 'MATLAB_GUI_教程(2)pushbutton', ...
    'MenuBar', 'none', ...
    'ToolBar', 'none');

%% 创建按钮
btn1 = uicontrol('Style', 'pushbutton', ...
    'Parent', h_fig, ...
    'String', '1', ...
    'Units', 'pixels', ...
    'Position', [50 50 50 50], ...
    'Callback', {@callback_btn1, h_fig});
setappdata(h_fig, 'btn1', btn1); % 把btn1保存到appdata中以便于在其他回调函数中使用

btn2 = uicontrol('Style', 'pushbutton', ...
    'Parent', h_fig, ...
    'String', '2', ...
    'Units', 'pixels', ...
    'Position', [50 200 50 50], ...
    'Callback', {@callback_btn2, h_fig});
setappdata(h_fig, 'btn2', btn2); % 把btn2保存到appdata中以便于在其他回调函数中使用

btn3 = uicontrol('Style', 'pushbutton', ...
    'Parent', h_fig, ...
    'String', '3', ...
    'Units', 'pixels', ...
    'Position', [200 200 50 50], ...
    'Callback', {@callback_btn3, h_fig});
setappdata(h_fig, 'btn3', btn3); % 把btn3保存到appdata中以便于在其他回调函数中使用

btn4 = uicontrol('Style', 'pushbutton', ...
    'Parent', h_fig, ...
    'String', '4', ...
    'Units', 'pixels', ...
    'Position', [100 300 50 50], ...
    'Callback', {@callback_btn4, h_fig});
setappdata(h_fig, 'btn4', btn4); % 把btn4保存到appdata中以便于在其他回调函数中使用

end


%% 按钮1的回调函数,obj和event我都用不上,所以用~代替
function callback_btn1(~, ~, h_fig)

% 获取2 3 按钮
btn2 = getappdata(h_fig, 'btn2');
btn3 = getappdata(h_fig, 'btn3');

% 点击按钮1时,隐藏按钮2,显示按钮3
btn2.Visible = 'off';
btn3.Visible = 'on';

end

%% 按钮2的回调函数,obj和event我都用不上,所以用~代替
function callback_btn2(~, ~, h_fig)

% 获取1 3 按钮
btn1 = getappdata(h_fig, 'btn1');
btn3 = getappdata(h_fig, 'btn3');

% 点击按钮2时,显示按钮1,隐藏按钮3
btn1.Visible = 'on';
btn3.Visible = 'off';

end

%% 按钮3的回调函数,obj和event我都用不上,所以用~代替
function callback_btn3(~, ~, h_fig)

% 获取2 1 按钮
btn2 = getappdata(h_fig, 'btn2');
btn1 = getappdata(h_fig, 'btn1');

% 点击按钮3时,隐藏按钮1,显示按钮2
btn2.Visible = 'on';
btn1.Visible = 'off';

end

%% 按钮4的回调函数,obj和event我都用不上,所以用~代替
function callback_btn4(~, ~, h_fig)

% 获取1 2 3 按钮
btn1 = getappdata(h_fig, 'btn1');
btn2 = getappdata(h_fig, 'btn2');
btn3 = getappdata(h_fig, 'btn3');

% 点击按钮4时,都显示
btn1.Visible = 'on';
btn2.Visible = 'on';
btn3.Visible = 'on';

end

结果如下:

4a73a9914dce1c484d9531c54546eb01.gif
finall

1dc6192784f1724b22e9548d0ae0fc41.png

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

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

相关文章

python中类和对象_Python里的类和对象简介

---恢复内容开始--- Python里的类 对象属性方法; 对象的属性主要是指主要的特征和参量,而方法主要是指函数; 类是一个具有一定特征和方法的集合,而对象是类的一个;类和对象的关系就如同模具和用这个模具制作出的物品之…

r语言 fread函数参数_R语言 第4章 初级绘图(6)

分析数据间的关系散点矩阵图如果数据框是多维数据,那么plot函数将绘制出两两之间散点图组合成为散点矩阵图(matrix of scatterplots)。散点矩阵图将多个散点图组合起来,以便可以同时浏览多个二元变量关系,一定程度上克服了在平面上展示高维数…

android 渠道打包工具,Android渠道打包技术小结

导读本文对比了渠道4种渠道打包方式:与iOS的单一渠道(AppStore)不同,Android平台在国内的渠道多入牛毛。以我们的App为例,就有27个普通渠道(应用宝,百度,360这种)和更多的推广专用渠道。我们打包技术也经过了若干次的改进。1.利用…

机械臂中的四元素转为旋转矩阵_雅克比矩阵(上)雅克比推导

1、前言 回顾前面几期的内容,在第一期中介绍了机器人的正/逆运动学建模,正运动学解决的问题是如何从关节空间的关节变量描述操作空间的位姿,反之则是逆运动学的内容。将操作空间和关节的空间的关系用以下关系式进行表达。机器人正/逆运动…

DS1819 对应版本的FFMPEG_OpenCV开发笔记(七十):红胖子带你傻瓜式编译VS2017x64版本的openCV4...

若该文为原创文章,转载请注明出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/107837715各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究红胖子(红模仿)的博文…

用Android打出马奔跑的动画,一款非常好用的动画库Lottie

简介Lottie是Android和iOS的移动图书馆,用于解析Adobe After Effects动画,并以Bodymovin作为json导出,并在手机和网络上本机呈现。该项目在GitHub已经获得三个端累计3万的star。在Lottie社区提供了更多的动画下载。如果你是一个设计师还可以将…

全站仪和手机连接软件_全站仪各方面应用的原理、操作及计算,看这篇就对了!...

来源:豆丁施工版权归原作者所有全站仪是什么?全站仪,即全站型电子速测仪。它是随着计算机和电子测距技术的发展,近代电子科技与光学经纬仪结合的新一代既能测角又能测距的仪器,它是在电子经纬仪的基础上增加了电子测距…

C#session共享+redis_技术干货分享:基于SpringBoot+Redis的Session共享与单点登录

categories:架构author: mrzhoutags:SpringBootredissession单点登录基于SpringBootRedis的Session共享与单点登录前言使用Redis来实现Session共享,其实网上已经有很多例子了,这是确保在集群部署中最典型的redis使用场景。在SpringBoot项目中&#xff0c…

android 热修复视频,Android热修复

所谓热修复,简单来说就是不以下载新版本apk的方式来修改应用的bug,而是在应用启动后从服务器下拉补丁包实现动态修复bug。所以在应用出现bug后,我们只需要打一个补丁,用户无需下载安装新的版本。主要是针对一些紧急的bug的修复。常…

text 两端对齐 小程序_leetcode 68 文本左右对齐

给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 填…

for循环如果先--_乐字节Java循环:循环控制和嵌套循环

乐字节小乐上次讲完了Java反射,接下来小乐给大家讲述Java循环。循环有以下四部分:Java循环一、循环控制1. do..while直到型 ( 先执行后判断) ,结构为:先执行循环体,后判断布尔表达式。循环体至少执行一次其流程图如下:2. for灵活的…

input框传值是怎么才能是整形_做了这些项目,到底多久才能化妆?

要说变美有两招最好用:一是化妆,二是整形。化妆能让长相普通的妹子变个大美妞,但程序繁琐的很,手残宝宝都表示好心累。整形就不一样了,不用左一层右一层的涂粉底神马的,绝对是手残党的福利,最最…

html纵向固定导航菜单代码,jQuery和css3响应式垂直固定导航菜单插件

这是一款非常实用的jQuery和css3响应式垂直固定导航菜单插件。当你的页面上有很多的内容,用户需要花费大量的时间才能找到他们想要的内容。这个垂直固定导航菜单插件能够为页面提供一个内容预览,使用户能非常轻松的找到他们需要的内容。HTML结构导航菜单…

单点登录 cas 设置回调地址_单点登录落地实现技术有哪些,有哪些流行的登录方案搭配?...

实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因此要点也就以下两个:1、存储信任 ;2、服务器生产~验证信任 ; 3、拿到服务器再次验证。单点登录的常见落地实现技术有哪…

python 长度queue_python:常见的数据结构

​ Python中常见的数据结构可以统称为容器。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。线性数据结构分类:栈(stack)--先进后出、 队列(queue)-先进先出、双端队列(deque…

纯java pdf转换成html,java pdf转换html代码

java pdf转换html代码[2021-02-03 00:56:42] 简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1a…

tina中信号带宽_如何评测示波器带宽

示波器最重要的单一特性,即带宽在频率域提供范围标示。带宽以Hz衡量,根据频率决定信号范围,以便能精确显示及进行测试。带宽不足,则示波器将不能显示出实际信号的准确表现。例如,信号的幅度也许会不准确、边缘也许会不…

esc指令检查打印状态_【行业知识分享】八千字解读ESC系统

汽车电子稳定控制系统ESC(Electronic StabilityController)是一个主动安全控制系统,通过传感器监控车辆自身行驶状态,在车辆紧急躲避障碍物、转弯等容易出现不稳定状况时,以及在转向过度或转向不足情况下,利用动力系统干预及制动系…

c语言中文网 vc++6.0下载量_【新手必看】C语言开发环境,请查收!

C语言开发环境的选择,貌似是告诉我们,工欲善其事,必先利其器。01、Visual StudioVisual Studio(简称 VS),它是 Windows 下的标准 IDE,VS系列为IDE(集成开发环境)&#xf…

hssfworkbook.write 生成文件 数据丢失_电脑文件丢失了,数据恢复我只用这一个软件!...

电脑使用久了,遇到硬盘数据丢失或者误删乃是常见之事。所以这样的事情发生之时,最重要的是找到一个明智的解决方法,切忌浮躁,一个不小心,可能造成更严重的后果。据不完全统计,当电脑文件丢失后,…