У меня возникают проблемы с попыткой сделать мои графические интерфейсы MATLAB автоматически resizeable. После исчерпывающего поиска в Интернете помощи и большого количества тестов я не смог найти решение.
Я развиваю простой графический интерфейс (с MATLAB, без использования GUIDE) на своем ноутбуке (Размер/разрешение экрана = 1366x768). Очень упрощенная версия выглядит так:
Когда я запускаю тот же графический интерфейс на своем настольном компьютере (Размер/разрешение экрана = 1920x1080), он отображается следующим образом:
Размеры 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
Любые идеи о том, как я могу решить эти проблемы?
Большое спасибо заранее.
С уважением,
Fábio Nery
EDIT1: Я также очень открыт для предложений о лучших способах инициализации размеров и стратегий GUI для предотвращения проблем при запуске графических интерфейсов в разных мониторах/разрешениях экрана.