加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab的GUI窗口,控件按比例自动缩放

(2016-04-13 18:42:04)
标签:

it

matalb

窗口缩放

gui缩放

按比例缩放

分类: 科技

方法一:

MATLAB GUI界面大小自动适应

在Tools里的GUI Options里,可以控制界面的大小以及缩放规则。自己体会一下就好 比如:选择Resize behivor里的选项Proportional,界面上的东西就会在运行时根据你的界面大小进行缩放选择none-resize则不变在panel里的东西,如果想要让他跟panel成比例缩放,也是调整Resize behivor里的选项为Proportional。

方法二:

MATLAB GUI界面大小自动适应

%将下面一段代码放到窗口的ResizeFcn事件中SSSSSSSSSS作者:程翔宇,转载请注明SSSSSSSSSS

function figure1_ResizeFcn(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)
%%
%存储位置信息==============================================================
saved=get(handles.figure1,'userdata');%存储是否已经保存窗口位置信息的标识符。空为未保存,1为已保存。防止重复保存,冲刷以前的数据。
if isempty(saved) % figure1.userdata赋值后,下次resize事件中,不再执行本段程序。
   
    OrgPosFig=get(hObject,'position');%获得主界面原始窗口位置信息数组
    OrgPosFigWidth=OrgPosFig(3);      %获得主界面原始窗口宽度
    OrgPosFigHeight=OrgPosFig(4);     %获得主界面原始窗口高度
   
    names=fieldnames(handles);%获得UI窗口中所有控件名称,存储在cell类型数组中
    Ln=length(names);%获得cell类型数组的控件元素个数
   
    for i=2:Ln %排除figure1主窗口名称,从第二个UI控件开始
        objnameCell=names(i);%得到cell类型字符串
        objnameString=char(objnameCell);%将cell类型转化为string类型字符串
        handlesstruc=strcat('handles.',objnameString);%获得handles.UI句柄字符串
        Hs=eval_r(handlesstruc);%获得handles.UI句柄
        PositStr=num2str(get(Hs,'position'));%变量位置字符串
        mystr=strcat(objnameString,'Pos = [ ',PositStr ,' ];');%变量赋值字符串
        eval_r(mystr);%获得变量表达式的赋值
    end
   
    save FigPosition %将所有变量,存储到FigPosition.mat文件中
    set(handles.figure1,'userdata',1); % figure1.userdata赋值后,下次resize事件中,不再执行本段程序。保证本段程序,只在界面打开时,仅执行一次
end
%%
%读取位置信息===========================================================
NewPosFig=get(hObject,'position');%获得主界面新窗口位置信息数组
NewPosFigWidth=NewPosFig(3);      %获得主界面新窗口宽度
NewPosFigHeight=NewPosFig(4);     %获得主界面新窗口高度
load FigPosition; %载入各元件原值数据,以便后继执行等比例放大操作
xWidthRatio=NewPosFigWidth/OrgPosFigWidth;   %主界面横轴放大比例(新值与原值相比)
yHeightRatio=NewPosFigHeight/OrgPosFigHeight;%主界面纵轴放大比例(新值与原值相比)
%执行元件缩放函数
names=fieldnames(handles);%获得UI窗口中所有控件名称,存储在cell类型数组中
Ln=length(names);%获得cell类型数组的控件元素个数
for i=2:Ln %排除figure1主窗口名称,从第二个UI控件开始   
    objnameCell=names(i);%得到cell类型字符串
    objnameString=char(objnameCell);%将cell类型转化为string类型字符串   
    ObjPosition=eval_r(strcat(objnameString,'Pos'));%将字符串转化为变量,并取出变量的值到ObjPosition
    resizeObj(objnameString,ObjPosition,xWidthRatio,yHeightRatio);%执行窗口缩放函数
end
drawnow update; %刷新窗口界面显示

%将下面一段代码放到一个独立函数中SSSSSSSSSS作者:程翔宇,转载请注明SSSSSSSSSS
function resizeObj(objName,objPosition,xWidthRatio,yHeightRatio)
%元件缩放函数

objPosition(1)=objPosition(1)*xWidthRatio;%按比例移动元件起点横坐标位置
objPosition(2)=objPosition(2)*yHeightRatio;%按比例移动元件起点纵坐标位置
objPosition(3)=objPosition(3)*xWidthRatio;%按比例缩放元件宽度值
objPosition(4)=objPosition(4)*yHeightRatio;%按比例缩放元件高度值

h1=findobj('tag',objName);     %获得元件句柄

set(h1,'position',objPosition);%执行元件缩放动作

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有