MATLAB:GUI组件/字体的自动调整

MATLAB:GUI组件/字体的自动调整,matlab,user-interface,resize,screen-resolution,Matlab,User Interface,Resize,Screen Resolution,我在尝试使MATLAB GUI自动调整大小时遇到问题。 在彻底搜索网络寻求帮助和大量测试后,我找不到解决方案 我一直在我的笔记本电脑中开发一个简单的GUI(使用MATLAB,不使用指南)(屏幕大小/分辨率=1366x768)。非常简化的版本如下所示: 当我在我的桌面计算机上运行相同的GUI时(屏幕大小/分辨率=1920x1080),它以以下方式显示: GUI的尺寸会根据屏幕大小自动初始化(代码在本文底部提供)。正如您所看到的(由红色箭头突出显示),组件之间的字体/间距不会自动调整大小,因此无论在

我在尝试使MATLAB GUI自动调整大小时遇到问题。 在彻底搜索网络寻求帮助和大量测试后,我找不到解决方案

我一直在我的笔记本电脑中开发一个简单的GUI(使用MATLAB,不使用指南)(屏幕大小/分辨率=1366x768)。非常简化的版本如下所示:

当我在我的桌面计算机上运行相同的GUI时(屏幕大小/分辨率=1920x1080),它以以下方式显示:

GUI的尺寸会根据屏幕大小自动初始化(代码在本文底部提供)。正如您所看到的(由红色箭头突出显示),组件之间的字体/间距不会自动调整大小,因此无论在何处运行文件,GUI都具有相同的特性

此外,当手动调整GUI的大小时,会出现一些组件重叠:


此最小工作示例使用的代码如下所示:

function resizingGUIexample()

%% SET UP GUI
hdl.mainfig = figure(); 

% MANAGE FIGURE DIMENSIONS -------------------------------------------------------------------------------------
set(hdl.mainfig, 'Units', 'pixels');
dims              = get(0, 'ScreenSize');
screenHeight      = dims(4);
verticalMargins   = floor((0.2*screenHeight)/2);          % =10% of the screen height in each side
figureHeight      =       (0.8*screenHeight);
figureWidth       =       (0.8*screenHeight)*(4/3);       % 4/3 Aspect Ratio
set(hdl.mainfig, 'Position', [0, verticalMargins, ... 
                figureWidth, figureHeight]);

movegui(hdl.mainfig,'center')     % move GUI to center

color = get(hdl.mainfig,'Color'); % get background color to hide static texts, etc...

% AXES ---------------------------------------------------------------------------------------------------------
hdl.axes = axes('Parent',   hdl.mainfig,  ...
             'Units',   'Normalized', ...
          'Position',   [0.295 0.05 0.63 0.63*(4/3)]);

% PUSH BUTTONS -------------------------------------------------------------------------------------------------
hdl.donePB = uicontrol(hdl.mainfig,                          ...
                  'Position',   [0.85 0.91 0.075 0.075], ...
                    'String',   'Done',                  ...
                  'Fontsize',   16,                      ...
                     'Units',   'normalized',            ...
                'FontWeight',   'Bold');

% BUTTON GROUP and RADIO BUTTONS -------------------------------------------------------------------------------
hdl.buttonGroup = uibuttongroup('Parent',    hdl.mainfig,  ...
                          'FontSize',    16,           ...
                        'FontWeight',    'Bold',       ...
                   'BackgroundColor',    color,        ...
                             'Units',    'Normalized', ... 
                          'Position',    [0.05 0.69 0.2 0.2]);
titleBG = sprintf('Intensity\nNormalization');
set(hdl.buttonGroup, 'Title', titleBG);

hdl.VolumeRB = uicontrol(hdl.buttonGroup,                   ...
                             'Style',    'radiobutton', ...
                            'String',    'Volume',      ...
                          'FontSize',    14,            ...
                        'FontWeight',    'Bold',        ...
                             'Units',    'normalized',  ...
                   'BackgroundColor',    color,         ...
                          'Position',    [0.1 0.67 0.8 0.3]);

hdl.SliceRB = uicontrol(hdl.buttonGroup,                   ...
                            'Style',    'radiobutton', ...
                           'String',    'Slice',       ...
                         'FontSize',    14,            ...
                       'FontWeight',    'Bold',        ...
                            'Units',    'normalized',  ...
                  'BackgroundColor',    color,         ...
                         'Position',    [0.1 .25 0.8 0.3]);

end
有没有办法解决这些问题

先谢谢你

亲切问候,

法比奥能源公司

EDIT1:我也非常乐意听取关于初始化GUI维度的更好方法和避免在不同显示器/屏幕分辨率下运行GUI时出现问题的策略的建议。

您是否尝试过使用ResizeFcn命令?您可以使用它让MATLAB自动调整单选按钮、面板等的大小,以满足您的需要。您可以使用此功能使按钮和面板的大小成为GUI尺寸的函数

网上有很多关于如何使用它的文档。例如,这说明了如何将其用于uipanel:

您还可以键入:

编辑([docroot'/techdoc/creating_plot/examples/doc_uipanel1'])


进入您的命令窗口,启动一个示例gui,在该gui中,他们使用调整大小功能调整gui中各种对象的大小。

首先,不使用指南做得很好-您通过了第一个测试:)

我强烈建议你看看并使用Ben Tordoff的。虽然您可以使用
ResizeFcn
属性来做这类事情,但我可以告诉您,使用GUI布局工具箱(GUI Layout Toolbox)可以轻松得多,它只为您处理这些事情

管理可能在不同大小和分辨率的不同(可能多个)监视器上运行的GUI是一件痛苦的事情。我建议预先指定一系列您将要支持的大小/分辨率,并坚持这一点(即使应用程序发现自己处于不受支持的设置中时出错),而不是尝试完全通用。如果你必须让一切工作,即使是在最低公分母设置,你可能不得不牺牲我们在更正常的设置容易

您似乎发现了
get(0,'ScreenSize')
movegui
命令。想到的其他有用的东西是
get(0,'MonitorPositions')
get(0,'ScreenPixelsPerInch')
,以及使用图形的
OuterPosition
而不是
Position
属性


希望有帮助

uipanel
声明为
uicontrol
的父级是使MATLAB GUI字体大小独立于屏幕分辨率的一种方法。在设置
fontsize
之前,您需要将
fontunits
设置为
normalized
。同时将
fontsize
设置为介于0和1之间的分数值

下面是一个示例代码

hp = uipanel(...);
uicontrol(hp,'text','fontunits','normalized','fontsize',0.5,...);
这种方法的警告是,
fontsize
将随父对象缩放,而父对象很可能随应用程序窗口缩放。在我的应用程序中,这种行为是可取的。

您可以使用:

function yourfunction
scrsz = get(0,'ScreenSize');%Obtem o tamanho do monitor

hFigure = figure(...  %Insere Uma figura para construção da interface
    'NumberTitle','off',...
    'Menubar','none',...
    'Tag','Figure',...
    'Name','You Figure',...
    'Units','pixels',...
    'Resize','on',...
    'Position',[(scrsz(3)-300)/2 (scrsz(4)-600)/2 800 700]);

Button = uicontrol('parent',hFigure,...%Insere objeto do tipo Pushbutton!
    'Style','pushbutton',...
    'String','Processa',...
    'Units','normalized',... 
    'Position',[0.25 0.25 0.5 0.5],...
    'Callback',{@callbackButton}); 

function callbackButton(hObject,eventdata)
a = 1