好久没用matlab了,用来开发算法是多么的友好、多么的效率呀~!收回我以前的那句话:matlab是玩具
言归正传,说说gui必备的三样元素:slider、edit、figure
用matlab写gui,就是为了贪图它的方便,用最简单的代码搞出一个适合跑算法的界面,这三个东西正合此意:通过slider或edit实时调整算法参数,figure实时绘画出调整后的结果,edit实时打印运算结果
slider的用法:
首先通过控件属性,可以修改slider的最大/最小值、调整步长。但调整步长是按照最大值1来计算的,如SliderStep为0.01,代表分100段,如果最大值是100,步长就是1,如果最大值是300,步长就是3,以此类推……
slider调整的步长是浮点数,即按一下slider的右箭头,增加的数值是小数,如果我们需要整型数,可以在slider的callback里面把get到的值进行强制类型转换,如:
sliderValue = get(handles.slider1,'Value');
ang = int32(sliderValue);
set(handles.slider1,'Value',ang);
slider控件的Callback一般写法:
function slider1_Callback(hObject, eventdata, handles)
sliderValue = get(handles.slider1,'Value');
set(handles.slider1,'Value',sliderValue);
func(sliderValue);% 自己编写的处理函数
guidata(hObject,handles);一旦修改slider,就会刷新sliderValue的值,然后调用func
同时,也可以用一个edit控件显示slider的值,只要在Callback里面添加:
set(handles.edit1,'String', num2str(ang));edit1是自己创建
edit的用法:
edit的用法大同小异
function edit1_Callback(hObject, eventdata, handles)
sliderValue=get(handles.edit1,'String');
sliderValue=str2num(sliderValue{1});
if (isempty(sliderValue) || sliderValue < 0 || sliderValue > 360)
set(handles.slider1,'Value',0);
set(handles.edit1,'String','0');
else
set(handles.slider1,'Value',sliderValue);
end要注意的是,第一句get到的sliderValue是一个cell,在str2num时要用sliderValue{1}的形式
下面的if语句是判断输入值是否合法,我这里是输入角度值,所以不能大于360
figure的用法:
在gui执行过程中,一旦建立了就一直存在,不管在什么地方建立的,这就带来很大的方便,在自己写的函数里面画图,返回时图像(figure)依然存在。然后就是要注意图像的刷新,需要刷新的地方加
hold off;想保留上一次结果加
hold on;
总结:gui中仅仅包括设置参数、显示文本的简单控件,显示图像的任务交给figure