这里介绍matlab gui设计之缩放,实现任意控件的缩放和不缩放设计
这里考虑实际需要,缩放GUI时并不想缩放全部控件,比如只想缩放坐标轴显示的波形,而设定按钮和串口配置等保持位置和大小不变
如果仅仅按照matlab上的示例和网上大部份资料,缩放配置时达不到这样的要求,这就要考虑如何实现这样的设计过程
如图上示意图,波形尺寸变化,但是要按钮控件保持不变
这就要有一个机制来实现,图形坐标及大小随着figure大小在变动;
根据matlab特性,设计步骤如下:
1.先设置总体可以缩放,在GUI选项中设置,如图1
图1:gui选项设定
这时整个窗体和所有控件都可缩放,所有控件没有区别
2.单独设置控件不可缩放,在属性中修改Units单位为像素pixels,如图2,这时按钮控件就不能缩放了
图2:按键设定为不能缩放
那可能要问了,这是不是就达到效果了,肯定没有,可以自己试一下;这时会导致控件处在一个固定的位置了,虽然大小不变了,但达不到随着界面大小变化而位置也在随动,如图3;
图3:错误的效果
3.我们就要解决2中存在的问题
我们观察控件的位置特点,它的位置与fig的右上角的位置差是固定的,所有我们只要读取fig的右上角的坐标后,然后根据xy差值,更新控件的位置信息即可
有这个图我们知道只要保证Δx,Δy保持不变就可以使得按钮控件的位置随着fig缩放变化保持一致
另外介绍几点关于坐标的信息:
在gui设计最低下有坐标显示:当前点:坐标是鼠标所在的位置,位置:是我们选择的控件或fig的位置信息,这里我们选择的是fig,所以就显示的是fig的位置,双击fig弹出属性,看到position是和这个信息一致的;修改position的值就可以改变fig的大小,xy是默认打开fig所在的位置(左下角起点);当然你选中其他组件,他们也是一致的信息;
在实际缩放中就是自动改变fig的大小即width、height两个值达到改变fig大小;
现在我们要做的:
第一步:就是读取fig的width、height
首先获取fig的pisition信息
figposition=get(gcf,'position');%这里得到了fig的位置值figposition=[x y width height ]
figwidth=figposition(3);%宽度,figposition是向量,直接下表引用即可
figheight=figposition(4);%高度
第二步:设定按钮的位置x,y
set(handles.button,'position',[figwidth-Δx figheight-Δx width height ]);
Δx Δy是我们开始设计gui时确定的差值,这个是确定的
4.整体代码
这里我们选择在fig的回调函数SizeChangedFcn中来更新按钮的坐标位置
function figure1_SizeChangedFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
size=get(gcf,'Position');
SizePosition=[(size(3)-50) (size(4)-40) 41 24];
set(handles.open,'Position',SizePosition);
5.演示效果:缩放后,按钮保持fig内的位置不变,而坐标轴缩放正常
这里只以按钮和坐标轴来示例,具体实际那些控件缩放不缩放,由实际需要而定