uifigure AutoResizeChildren и uigridlayout - PullRequest
0 голосов
/ 02 марта 2020

Я хочу реализовать максимальную ширину для столбца uigridlayout. Хотя реализовать его довольно просто, при установке SizeChangedFcn для uifigure:

: *1004*

возникает следующее предупреждение: Обратный вызов 'SizeChangedFcn' не будет выполнен, пока для 'AutoResizeChildren' установлено значение ' on '.

Если использовать uipanel в uifigure

f = uifigure();
p = uipanel(f, 'BackgroundColor', 'r');

и изменить размер окна, размер панели также изменится. Это останавливается, если установить

f.AutoResizeChildren = 'off'

Конечно, я хочу сохранить автоматическое изменение размера дочерних элементов uifigure и выполнить обратный вызов. Однако, в моем случае, единственным прямым потомком uifigure является uigridlayout, и что интересно (включая его потомков), размер отлично меняется, даже если AutoResizeChildren установлен на off:

f = uifigure();
f.Position(3) = 190;
g = uigridlayout(f);
for k = 0:1/3:1
    uipanel(g, 'BackgroundColor', [1 1 1]*k)
end

f.SizeChangedFcn = @(h,e)onSizeChanged(f,g);

f.AutoResizeChildren = 'off';

function onSizeChanged(f,g)
    w = f.Position(3) - g.Padding(1) ...
        - g.Padding(3) - (length(g.ColumnWidth)-1)*g.ColumnSpacing;
    if w/2 >= 200
        g.ColumnWidth{1} = 200;
    else
        g.ColumnWidth{1} = '1x';
    end
    fprintf('\nPanel widths:\n');
    for k = 1:length(g.Children)
        fprintf('%g: %g\n', k, g.Children(k).Position(3));
    end
end

документы говорят:

Свойство AutoResizeChildren влияет на прямые дочерние элементы контейнера, а не на дочерние элементы внутри вложенных контейнеров.

Теперь uigridlayout в приведенном выше примере является прямым потомком uifigure, но его размер изменяется.

Кто-нибудь знает, считается ли uigridlayout особенным в этом случае, и только документы немного короткие, или если это ошибка, и я не должен полагаться на нее?

Версия Matlab была 2019a Обновление 7 Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...