UItabgroup does not save position within UIfigure using saveas or savefig
이전 댓글 표시
I am having issues using saveas with UItabgroups. It seems the position of the uitabgroup is not saved when using saveas, and defaults to a smaller portion of the figure when opened again. I have seen a few similar questions with no concrete answers, a few users had suggested it's a "bug" but all other UIfigure properties I add save fine.
%initialize figure
hfig1 = uifigure;
hfig1.WindowState = 'maximized';
htabgroup = uitabgroup(hfig1,"SelectionChangedFcn",@displaySelection);
htabgroup.Position = [0 0 1600 800];
%% Button for save
save_btn = uibutton(hfig1,"Text","Save Figure","Position",[1610 740 75 25]);
save_btn.ButtonPushedFcn = {@saveFig,hfig1};
function saveFig(src,event,hfig)
%Get new file name
prompt2 = {'Would you like to save the figure? If yes, please enter desired name below, otherwise hit okay'};
dlgtitle2 = 'Input';
fieldsize2 = [1 150];
definput2 = {'Figure_file_name'};
fig_file_cell = inputdlg(prompt2,dlgtitle2,fieldsize2,definput2);
%Covnert file name and save
fig_file_save = convertCharsToStrings(char(fig_file_cell));
saveas(hfig,fig_file_save,'fig')
end
댓글 수: 6
Walter Roberson
2024년 11월 1일
Madheswaran
2024년 11월 5일
Hi @Bennett
I tried to reproduce the issue with a similar setup but wasn't able to replicate the behavior you're describing. In my testing, both the position and window state were preserved when using 'saveas' function to save the figure and reopening it using 'openfig'.
For debugging I suggest you try the following:
- Check if the issue occurs with a simpler test case (without tabs)
- Check if you are doing any other window manipulations
- Print the figure position and window state before saving and after opening to check what changed in detail
As a workaround, you could also try storing the position and window state explicitly using 'UserData' property of 'UIFigure' in the 'saveFig' function:
fig.UserData.SavedPosition = fig.Position;
fig.UserData.SavedState = fig.WindowState;
While opening the figure, update the 'Position' and 'WindowState' of the figure as per the 'UserData'.
fig = openfig(filename);
if isfield(fig.UserData, 'SavedState')
fig.WindowState = fig.UserData.SavedState;
end
if isfield(fig.UserData, 'SavedPosition')
fig.Position = fig.UserData.SavedPosition;
end
Let me know if this resolves the issue you are facing!
Bennett
2024년 11월 6일
Bennett
2024년 11월 6일
Walter Roberson
2024년 11월 6일
You did not answer the question of why you are using saveas() instead of savefig() ?
Bennett
2024년 11월 7일
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Interactive Control and Callbacks에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

