Child item with an x position greater than its parent panel's width still appears inside it
Show older comments
I get the width of a panel in pixels like this:
set(MyPanel,'units','pixel')
pos = MyPanel.Position;
set(MyPanel,'units','normalized')
The width comes back as 510 px, yet a child of this panel that has an x position of 600 or more still appears inside the panel. How is this possible?
Edit to provide a minimum working example and steps to reproduce the problem:
Step 1: Create an app using the "2-Panel App with Auto-Reflow" template
Step 2: Set startupFcn to the following:
function startupFcn(app)
drawnow
fig_position = app.UIFigure.Position;
fig_width = fig_position(3);
fig_height = fig_position(4);
app.GridLayout.ColumnWidth = {0.54*fig_width, 0.46*fig_width};
app.GridLayout.RowHeight = fig_height;
app.UIFigure.WindowState = 'maximized';
MyPanel = uipanel(app.LeftPanel,"Units","normalized","Position",[0 0.5 1 0.3]);
pos = getpixelposition(MyPanel);
pos3 = app.LeftPanel.Position;
pos2 = getpixelposition(app.LeftPanel);
end
Step 3: Set a breakpoint at the end of the function and hover over app.LeftPanel.Position and pos3. You will see that the width value for some reason is different! (See images below)

13 Comments
Bruno Luong
on 26 Apr 2022
May be there are some child/objects that you didn't expect it's there, and dind't inspect them?
John F
on 26 Apr 2022
I can't reproduce what you report:
h=uipanel;
set(h,'unit','pixel');
pp=get(h,'position')
ax=uiaxes(h);
set(ax,'unit','pixel');
pa=get(ax,'position')
pa(1)=pp(3)+1
set(ax,'position',pa) % axes must disappear since it is overflowed on the extrem right side
John F
on 26 Apr 2022
Walter Roberson
on 26 Apr 2022
I am unclear as to how the High Density Display accommodations affect these numbers (if at all.)
John F
on 26 Apr 2022
Bruno Luong
on 26 Apr 2022
It will be helpful if you can provide a minimum working example.
John F
on 26 Apr 2022
Bruno Luong
on 26 Apr 2022
Edited: Bruno Luong
on 26 Apr 2022
With this command
MyPanel = uipanel(app.LeftPanel,"Units","normalized","Position",[0 0.5 1 0.3])
You create another uipanel within the LeftPanel, not the app figure.
As I told above, you might have some other oject that you are not suspected it is there.
John F
on 26 Apr 2022
Bruno Luong
on 26 Apr 2022
Edited: Bruno Luong
on 26 Apr 2022
I add drawnow (attached test file)
drawnow
MyPanel = uipanel(app.LeftPanel,"Units","normalized","Position",[0 0.5 1 0.3]);
drawnow
pos = getpixelposition(MyPanel); % <- width 218
pos3 = app.LeftPanel.Position; % <- width 220
pos2 = getpixelposition(app.LeftPanel); % <- width 220
Command line output without debugger:
>> app1
pos =
1.0000 240.0000 344.0000 143.4000
pos3 =
1 1 346 480
pos2 =
1 1 346 480
>>
So it reduces 1 pixel each side. Seems like not an abnormal size.
John F
on 26 Apr 2022
Bruno Luong
on 26 Apr 2022
Just keep in mind that App and GUI workflow is Event driven, so concurrent and can be quite surprise if you don't pay close attention.
Answers (0)
Categories
Find more on Develop Apps Using App Designer in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!