MATLAB GUI を自動的にサイズ変更可能にしようとすると問題が発生します。Web でヘルプと多くのテストを徹底的に検索した後、解決策を見つけることができませんでした。
ラップトップで単純な GUI ( GUIDE を使用せずに MATLAB を使用) を開発しています (画面サイズ/解像度 = 1366x768 )。非常に単純化されたバージョンは次のようになります。
デスクトップ コンピューター (画面サイズ/解像度 = 1920x1080 ) で同じ GUI を実行すると、次のように表示されます。
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 を実行する際の問題を回避するための戦略についての提案にも非常にオープンです。