uicontrol 里面经常用的callback函数 ,用callback时,后面的语句需要 在两边用单引号括起来, 原来的单引号变成双引号。
% 2个按钮
hb1 = uicontrol(...
'Parent',hf,'Units','Normalized',...
'Position',[0.85 0.85 0.2 0.15],'String','预览',...
'Callback',...
{'vidRes = get(obj, ''VideoResolution'');' ...
'nBands = get(obj, ''NumberOfBands'');' ...
'hImage = image( zeros(vidRes(2), vidRes(1), nBands) );'...
'preview(obj, hImage);'...
}); %注意,callback 后面的语句 ,1、多个语句需要用中括号【】括起来,2、每行需用一对单引号括起来
关于callback使用
h1=('parent',h0,'position',[0.15 0.45 0.75 0.45],'visible','on');
x=0:0.1:2*pi;
k=line(x,sin(x));
set(0,'DefaultUicontrolfontsize',12);
p1=uicontrol('parent',h0,'string','加号','position',[80 120 50 30],'callback','set(k,"marker","+")');
为什么按按钮后总是提示:
??? Error: The input character is not valid in statements or expressions.
??? Error while evaluating uicontrol Callback.
maker和+号是用两个单引号 ' 括起来的,而不是一个双引号 "。!!
h0=figure('position',[200 60 450 450],'name','test');
h1=axes('parent',h0,'position',[0.15 0.45 0.75 0.45],'visible','on');
x=0:0.1:2*pi;
k=line(x,sin(x));
set(0,'DefaultUicontrolfontsize',12);
p1=uicontrol('parent',h0,'string','加号','position',[80 120 50 30],'callback','set(k,''marker'',''+'')');
' Callback ' 属性值是一个MATLAB字符串,MATLAB将它传给函数eval并在命令窗口工作
空空间行。它对于函数M文件有重要的隐含意义。
因为 ' Callback ' 属性必须是字符串,所以在字符号内多重MATLAB命令、后续行以及
字符符串都会使必需的句法变得十分复杂。如果有不止一个命令要执行,命令间必须适
当地分隔开来。例如
>>uimenu( ' Label ' , ' Test ' , ' CallBack ' , ' grid on; set(gca, ' '
Boox ' ' , ' ' on ' ' ) ' );
把一个字符串传给eval,使命令
>> grid on; set(gca, ' Box ' , ' on ' )
在命令窗口工作空间中执行。这是合法的句法,因为命令用逗号或分号隔开,多重命令
可输输入到同一命令行中。 在定义回调函数时,也遵循MATLAB规定,即在已引用的字符
串内,用两个单引号来表示单引号。
字符串可以串接起来生成一个合法MATLAB字符串,只要把它们括在方括号中。
>>uimenu( ' Label ' , ' Test ' , ' CallBack ' ,[ ' grid on, ' , ' set(g
ca, ' ' Box ' ' , ' ' on ' ' ) ' ]);
注意字符串 ' grid on ' 含有所需的逗号以分隔两个命令。
如果使用了续行号,上述命令可写为
>>uimenu( ' Label ' , ' Test ' ,...
' CallBack ' ,[...
' grid on, ' ,...
' set(gca, ' ' Box ' ' , ' ' on ' ' ) ' ...
]);
上例中命令行被分隔,每 行的末尾加上了三个句号表示命令的继续。注意到上列单行的
所有有元素都被保留,包括字符串分隔命令的逗号。在 ' grid on, …' 行中最后引号
后的逗号是可选的;下一行开始的空格起相同的作用。
找错错的。 为了使错误最少,对包含MATLAB语句的回调字符串请记住以下的一些规则:
* 把整个回调字符串括在方括号中,不要忘记最后的右括号' )' 。
* 把各语句括上单引号。
* 已引用的字符串内,要用双引号。如: ' quoted ' : ' a ' ' quoted ' ' string
' ; ' Quote ' ' a ' ' ' quoted ' ' ' string ' ' now '。在引号后要用逗号或空
格结尾。
* 除了最后一句,各语句在引号内要以逗号或分号结尾;在引号后要用逗号或空格结结
尾
* 有后续行的各行要以三个句号(...)结尾。
Gui数据 它的保存方式就是 通过handles的结构体,,结构体的字段名就是 每个对象的tag值 通过handles.tag 对应 对象的句柄
每个对象的句柄 就是通过handles的结构体来访问每一个字段的值
如果我们有一些数据需要在不同控件之间调用 ,也可以 自定义一个 user的 gui数据的方式
如
handles.user=[]
主要 更改后,要通过 guidata.(hObject,handles); 更新数据,否则更改是无效的。