今天学GUI编程是,碰到这样一条语句:
push1=uicontrol(win,... 'Style','pushbutton',... 'Position',[50,200,100,30],... 'String','Plot sin(x)',... 'Callback',... [' subplot(axs);'... 'x=0:0.1:4*pi;'... 'y=sin(x);'... 'plot(x,y);'... 'axis([0 4*pi -1 1]);'... 'grid on;'... 'xlabel(''x'');'... 'ylabel(''y=sin(x)'');'... 'title(''Sine Curve'')']);
最后三句中,涉及到在单引号中嵌套单引号(在matlab中,正常的语句为 xlabel('x'),但现在要把这个语句变成一个字符串)。
开始时,我按Python中的处理方法,内层的引号改成双引号("),当这样做后会报错如下:
??? Error using ==> subplot(axs);x=0:0.1:4*pi;y=sin(x);plot(x,y);axis([0 4*pi -1 1]);grid on;xlabel("x");ylabel('y=sin(x)');title('Sine Curve') Error: The input character is not valid in MATLAB statements or expressions. ??? Error while evaluating uicontrol Callback
然后百度了一下,发现这个方法是错的,正确的做法是:将里层的单引号用两个单引号表示。也就是说'xlabel(''x'')' 字符串代表小label('x')而非'xlabel("x")' 。
在matlab的command window中验证如下:
>> a='xlabel(''x'')' a = xlabel('x') >> b='xlabel("x")' b = xlabel("x") >> whos Name Size Bytes Class Attributes a 1x11 22 char b 1x11 22 char
如下语句:
radio(3)=uicontrol(win,... 'Style','radiobutton',... 'Position',[50,170,100 30],... 'String','Draw in Blue',... 'Callback',... ['n=3;'... 'if get(radio(3),''Value'')==1;'... 'set(radio([1:(n-1),(n+1):radionum]),''Value'',0);'... 'else;'... 'set(radio(3),''Value'',1);'... 'end;'... 'colorstr=''b'';'... 'set(fh,''Color'',''blue'');']);
后面一项
['n=3;'... 'if get(radio(3),''Value'')==1;'... 'set(radio([1:(n-1),(n+1):radionum]),''Value'',0);'... 'else;'... 'set(radio(3),''Value'',1);'... 'end;'... 'colorstr=''b'';'... 'set(fh,''Color'',''blue'');']
是个字符串,是要在matlab中运行的命令。看见其中有if...else...end语句,要确保在matlab中运行正确,if、else、end后要么加分号(;),要么加空格。否则else和set是连在一起的,matlab会认为elseset是个函数名,从而报错。