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