您的位置:首页 > 编程语言 > MATLAB

MATLAB GUI编程开发小点

2015-01-09 23:45 337 查看
a=get(handles.edit3,'String');


set(handles.edit3,'String','1');

a=get(hOject,'String');



set(hOject,'String','1');
产生的效果是一样的,应该是MATLAB显示问题,hOject中O是大写字母,而不是零。

-----------------------------------------------------------------------------------------------------------------

一般不能单独运行.fig文件,有时会出现不能运行的问题,

可以运行.m文件,或者用guide 打开可编辑的.fig文件来运行GUI程序这样就不会出问题,

用guide来打开fig文件

------------------------------------------------------------------------------------------------------------------------------------

调整GUI大小;

回调函数;

控件;

panel 可以在panel上放置其他控件;

GUI控件的“Tag”属性提供了一个唯一的标示符;

guide使用“Tag”属性来命名由控件生成的MATLAB函数;

GUI生成两个文件,.FIG文件包含布局信息,.M实现代码,包含GUI生成的代码(回调函数);

handles.output=hObject;自动生成的代码,指定这个GUI被调用后所返回的内容;

guidata(hObject,handles);是更新句柄数据结构所必需的;

控件--右键--view Callback--Callback,查看回调函数;

which laughter.mat 文件的位置;

close(相应句柄);可以关闭相应的图像。。;

消息对话框:

msgbox('message','title','style');

msgbox('message');只显示内容;

style可以为question、warn、help、error、custom、none等

选择对话框默认3个选项Yes No Cancel

answer=questdlg('Do you want to quit the program ?')

switch answer

case 'Yes'

close(gcbf);

case 'No'

msgbox('you choose no !');

case 'Cancel'

msgbox('you choose cancel !');

end

logo;

hold;保留当前图像

close;关闭图像

用过matlab做GUI的人可能者有或者曾经有过这样的疑惑,handles到底是一个什么鬼东西,我又该怎么去操控它。其实handles很简单,只是matlab里的帮助好像把它说的很麻烦罢了。

为了说明问题,我们不访拿户籍管理做一个类比吧,我们知道,我们每个人都有一个名字和一个身份证号,我们可以同名,但我们的身份证号是唯一的。小米做的matlab可能就是借用的这种思想(毕竟都是管理嘛,只不过一个管的是人,一个管的是控件而已)。

matlab里的每个控件都一个编号,就好像我们的身分证号一样,而且它们在整个程序执行期间都是唯一的。它们是在程序打开时由matlab自动分派,并且这个号在程序执行期间是不可改的。程序关闭后这些编号会被自动撤销(其实就是变量嘛,程序一关变量自然就over了),在下次程序启动时会被重新分派,所以你不要指望这次把这个号记住,下次通过这个号再找出对应的控件。但是记住每个控件的号肯定是一个让人头大的事,所以maltab就又给每个控件一个名字Tag,通过Tag我们很容易记住控件的标识。但是名字名字有一个缺点,就是重名的问题,你叫张三,人家也能叫张三,不过好在都是我们给控件命名的,可以避免这一个问题。除了容易记住这一优点外,Tag还有一个优点就是关闭程序后在下次执行时它还是一样的(Tag可以被人为更改,只要你没有改的话它就是不变的),所以下次启动时我们可以通过Tag来找到我们想要的控件。

我们可以看到handles的结构是“Tag:标号”,比如一个控件按钮的Tag是test,标号是100,那么在程序中就有这样一种对应关系test就对应着100,也就是名为test的变量中存着100,而100对应着这个按钮。我们可以更改handles.test的值:

handles.test=99;

guidata(gcf,handles)

但是改过之后你再也不能通过test来找到那个按钮控件了,如果你不幸没有记住那个标号的话,那么你就与那个按钮控件失去联系了。

另外,matlab中获取handles的方法有两种,第一个是通过handles=guidata(gcf)来获得,第二种是通过handles=guihandles来获得,那么这两个有什么区别呢?经过测试发现通过uimenu创建一个新的控件,

h=uimenu(hparent,'Tag','mymenu');

此时用handles=guidata(gcf)所得到的handles中不会有handles.mymenu的(matlab帮助上说了),但是用handles=guihandles得到的却会有handles.mymenu.只有加上下面两句话:

handles.mymenu=h;

guidata(gcf,handles);

才会通过handles=guidata(gcf)得到handles.mymenu;

还应该注意到guidata得到的handles与guihandles得到的handls是不一样的,不能用guihandles得到的handles来覆盖handles.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: