uitree

Создайте дерево или компонент дерева флажка

Описание

t = uitree создает стандартное дерево в новом окне рисунка и возвращает Tree объект. MATLAB® вызывает uifigure функция, чтобы создать фигуру.

t = uitree(style) создает дерево заданного стиля. Задайте style как 'checkbox' создать дерево флажка вместо стандартного.

пример

t = uitree(parent) создает стандартное дерево в заданном родительском контейнере. Родительским элементом может быть Figure созданный при помощи uifigure функция или один из ее дочерних контейнеров.

пример

t = uitree(parent,style) создает дерево заданного стиля в заданном родительском контейнере.

пример

t = uitree(___,Name,Value) создает дерево со свойствами, заданными одним или несколькими Name,Value аргументы. Используйте эту опцию с любыми комбинациями входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Создайте дерево, которое содержит родительский узел под названием Sample Data с дочерним узлом под названием Sample 1. Расширьте дерево, чтобы видеть оба узла.

fig = uifigure;
t = uitree(fig);
parent = uitreenode(t,'Text','Sample Data');
child = uitreenode(parent,'Text','Sample 1');
expand(t)

Tree with two nodes.

Создайте дерево флажка, которое содержит родительский узел под названием Sample Data с дочерним узлом под названием Sample 1. Расширьте дерево, чтобы видеть оба узла.

fig = uifigure;
t = uitree(fig,'checkbox');
parent = uitreenode(t,'Text','Sample Data');
child = uitreenode(parent,'Text','Sample 1');
expand(t)

Check box tree with two nodes.

Разработайте узлы в дереве, которое демонстрирует файловую структуру, чтобы визуально отличить различные типы файлов.

Создайте древовидный компонент пользовательского интерфейса. Каждый узел верхнего уровня представляет папку. Каждый дочерний узел представляет файл в той папке. Расширьте дерево, чтобы видеть все узлы.

fig = uifigure('Position',[300 300 350 400]);
t = uitree(fig);

% Parent nodes
n1 = uitreenode(t,'Text','App 1');
n2 = uitreenode(t,'Text','App 2');
n3 = uitreenode(t,'Text','Images');

% Child nodes
n11 = uitreenode(n1,'Text','myapp1.m');
n21 = uitreenode(n2,'Text','myapp2.m');
n22 = uitreenode(n2,'Text','app2callback.m');
n31 = uitreenode(n3,'Text','peppers.png');
n32 = uitreenode(n3,'Text','corn.tif');

expand(t)

Tree with three top-level nodes with text "App 1", "App 2", and "Images", and nested nodes with file names.

Создайте три стиля: один с полужирной толщиной шрифта, один с углом курсивного шрифта, и один с синим цветом шрифта.

dirStyle = uistyle('FontWeight','bold');
imgStyle = uistyle('FontAngle','italic');
mStyle = uistyle('FontColor','blue');

Примените полужирный стиль к узлам верхнего уровня, чтобы отличить узлы, которые представляют папки. Примените синий стиль к дочерним элементам App 1 и App 2 узлы, чтобы отличить узлы, которые представляют файлы программы MATLAB. Наконец, примените курсивный стиль к узлам, которые представляют файлы изображений.

addStyle(t,dirStyle,'level',1); 
addStyle(t,mStyle,'node',[n1.Children;n2.Children]);
addStyle(t,imgStyle,'node',[n31 n32]);

Tree UI component. The "App 1", "App 2", and "Images" nodes are bold, the nodes with file names that end in .m are blue, and the image file names are italic.

Создайте приложение, которое отображает имена спортсмена, сгруппированные спортом. Когда пользователь приложения нажимает на имя, данные об отображениях MATLAB о спортсмене.

Создайте программный файл под названием mytreeapp.m это содержит следующие команды, чтобы создать дерево, набор вложенных древовидных узлов и функцию обратного вызова для дерева. SelectionChangedFcn свойство задает функцию, чтобы выполниться, когда пользователь кликает по узлу в дереве.

function mytreeapp
    fig = uifigure;
    t = uitree(fig,'Position',[20 20 150 150]);

    % Assign callback in response to node selection
    t.SelectionChangedFcn = @nodechange;

    % First level nodes
    category1 = uitreenode(t,'Text','Runners','NodeData',[]);
    category2 = uitreenode(t,'Text','Cyclists','NodeData',[]);

    % Second level nodes.
    % Node data is age (y), height (m), weight (kg)
    p1 = uitreenode(category1,'Text','Joe','NodeData',[40 1.67 58] );
    p2 = uitreenode(category1,'Text','Linda','NodeData',[49 1.83 90]);
    p3 = uitreenode(category2,'Text','Rajeev','NodeData',[25 1.47 53]);
    p4 = uitreenode(category2,'Text','Anne','NodeData',[88 1.92 100]);

    % Expand the tree
    expand(t);
    
    % Create the function for the SelectionChangedFcn callback
    % When the function is executed, it displays the data of the selected item
    function nodechange(src,event)
        node = event.SelectedNodes;
        display(node.NodeData);
    end
end

Когда пользователь запускает mytreeapp и кликает по узлу в дереве, MATLAB отображает NodeData для того узла.

Создайте приложение, которое отображает список покупок, сгруппированный продовольственной категорией. Пользователь приложения может проверять отдельные элементы или целые продовольственные категории, и MATLAB отображает общую массу проверенных элементов.

Создайте программный файл под названием mycheckboxtreeapp.m это содержит следующие команды, чтобы создать дерево флажка, набор вложенных древовидных узлов и две функции обратного вызова для дерева флажка. CheckedNodesChangedFcn свойство задает функцию, чтобы выполниться, когда пользователь проверяет или снял флажок с узлом в дереве. SelectedNodesChangedFcn свойство задает функцию, чтобы выполниться, когда пользователь выбирает узел в дереве.

function mycheckboxtreeapp
    fig = uifigure;
    cbt = uitree(fig,'checkbox','Position',[20 20 150 150]);
    
    % Assign callbacks in response to node check and selection
    cbt.CheckedNodesChangedFcn = @checkchange;
    cbt.SelectionChangedFcn = @selectchange;
    
    % First level nodes
    category1 = uitreenode(cbt,'Text','Vegetables','NodeData',[]);
    category2 = uitreenode(cbt,'Text','Fruits','NodeData',[]);

    % Second level nodes.
    % Node data is the weight of the food item (in grams)
    p1 = uitreenode(category1,'Text','Cucumber','NodeData',400);
    p2 = uitreenode(category1,'Text','Carrot','NodeData',65);
    p3 = uitreenode(category2,'Text','Apple','NodeData',183);
    p4 = uitreenode(category2,'Text','Banana','NodeData',120);

    % Expand the tree
    expand(cbt);
    
    % Create the function for the CheckedNodesChangedFcn callback
    % When this function is executed, it displays the total weight
    % of all checked items
    function checkchange(src,event)
        nodes = event.LeafCheckedNodes;
        if ~isempty(nodes)
            data = [nodes.NodeData];
            display(sum(data));
        end
    end

    % Create the function for the SelectedNodesChangedFcn callback
    % When this function is executed, it displays the name
    % of the selected item
    function selectchange(src,event)
        node = event.SelectedNodes;
        display(node.Text);
    end
end

Когда пользователь запускает mycheckboxtreeapp и проверки или снятия флажка узел в дереве, MATLAB отображает сумму весов (сохраненный в NodeData) для всех проверенных узлов второго уровня. Когда пользователь выбирает узел в дереве, MATLAB отображает текст того узла.

Создайте дерево, которое заполняет узлы на основе данных в таблице.

Создайте фигуру с менеджером по размещению сетки, чтобы содержать компоненты пользовательского интерфейса. Загрузите выборочные данные на отключениях электричества электроэнергетики и создайте компонент таблицы UI, чтобы отобразить данные. Затем создайте дерево, чтобы содержать узлы, перечисляющие области и причины отключений электричества.

fig = uifigure;
gl = uigridlayout(fig,[1 2]);
gl.ColumnWidth = {'2x','1x'};

T = readtable('outages.csv');
T = T(1:20,{'Region','OutageTime','Loss','Cause'});
tbl = uitable(gl,'Data',T);

tr = uitree(gl);

Задайте табличные переменные, чтобы отобразиться в дереве. Для каждой из тех переменных создайте узел верхнего уровня, текст которого является именем переменной. Извлеките соответствующие данные путем преобразования записей таблицы для переменной к категориальному массиву и возврата списка категорий как names. Затем цикл через категории. Для каждого элемента добавьте узел в дерево под соответствующим родительским узлом.

vars = {'Region','Cause'};

for k1 = 1:length(vars)
    var = vars{k1};
    varnode = uitreenode(tr,'Text',var);
    rows = T{:,var};
    names = categories(categorical(rows));
         
    for k2 = 1:length(names)
        text = names{k2};
        uitreenode(varnode,'Text',text);
    end
end

Расширьте дерево, чтобы видеть все узлы.

expand(tr)

Figure window with a table and a tree. The table contains outage sample data, and the tree contains a node for each region and cause in the table data.

Когда вы создаете древовидный компонент пользовательского интерфейса со многими узлами, можно обеспечить более быстро реагирующий опыт для пользователя приложения путем создания дочерних узлов только после того, как родительский узел расширен.

Эта практика обладает этими преимуществами:

  • Улучшает время запуска для вашего приложения, потому что приложение создает только древовидные узлы верхнего уровня прежде, чем отобразить компонент.

  • Улучшает полное время загрузки в случаях, где пользователь приложения не должен получать доступ ко всем узлам на одном сеансе, потому что приложение создает только узлы, которые пользователь приложения запрашивает видеть.

Чтобы создать дочерние узлы, когда родительский элемент будет расширен, запишите NodeExpandedFcn коллбэк для дерева, и создает узлы в функции обратного вызова.

Например, создайте приложение, которое отображает имена пациентов и больницы в дереве. Создайте файл с именем patientTreeApp.m в вашей текущей папке и задают функцию с именем patientTreeApp. В функции выполните эти шаги:

  1. Читайте в демонстрационных данных о пациентах и сохраните их в табличной переменной под названием T.

  2. Создайте окно рисунка, и затем создайте дерево на рисунке.

  3. Заполните дерево с двумя узлами верхнего уровня. Эти узлы будут иметь дочерние элементы с именами больницы и именами пациентов из данных.

  4. Для каждого из узлов верхнего уровня создайте один дочерний элемент с текстом 'Loading...'. Этот дочерний узел гарантирует, что узлы верхнего уровня имеют опцию для пользователя приложения, чтобы расширить их. Это предоставляет пользователю приложения мгновенную обратную связь, когда они сначала расширяют узел.

  5. Присвойте createNodes функционируйте к NodeExpandedFcn свойство коллбэка дерева. Передайте терпеливые табличные данные как вход к функции. MATLAB выполняет createNodes функционируйте каждый раз, когда пользователь приложения расширяет узел дерева.

function patientTreeApp
    T = readtable('patients');
    
    fig = uifigure;
    tr = uitree(fig,'Position',[20 20 300 300]);
    hospitalnode = uitreenode(tr,'Text','Hospitals');
    namenode = uitreenode(tr,'Text','Patient Names');
    for k = 1:length(tr.Children)
        node = tr.Children(k);
        uitreenode(node,'Text','Loading...');
    end

    tr.NodeExpandedFcn = {@createNodes,T};
end

Затем в том же файле задайте createNodes функция обратного вызова. Задайте функцию, чтобы принять эти входные параметры: и данные о событиях источника коллбэка компонента, которые MATLAB передает функциям обратного вызова и данным о пациентах. В функции выполните эти шаги:

  1. Сохраните узел, который был расширен в переменной под названием parent, и затем удалите все дочерние элементы того узла.

  2. В зависимости от которого узел был расширен, хранилище или имена больницы или имена пациентов в переменной под названием children.

  3. Для каждого из имен, сохраненных в children, создайте древовидный узел, текст которого - то, что имя, и затем порождает его к расширенному узлу.

function createNodes(src,event,T)
    parent = event.Node;
    delete(parent.Children);
    
    switch parent.Text
        case 'Hospitals'
            children = categories(categorical(T.Location));
        case 'Patient Names'
            children = categories(categorical(T.LastName));
    end

    for k = 1:length(children)
      text = children{k};
      uitreenode(parent,'Text',text);
    end
end

Вызовите patientTreeApp функция из командной строки, чтобы запустить приложение.

patientTreeApp

Расширьте Hospitals и Patient Names узлы, чтобы сгенерировать и отобразить их дочерние элементы.

A tree UI component in a figure. There are two expanded top-level nodes: "Hospitals" and "Patient Names". Each has children listing the relevant names.

Входные параметры

свернуть все

Стиль дерева в виде одного из следующего:

  • 'tree' — Иерархический список элементов

  • 'checkbox' — Иерархический список элементов, которые могут проверяться, подарил флажок слева от каждого элемента

Родительский контейнер в виде Figure объект создал использование uifigure функция или один из ее дочерних контейнеров: TabПанельГруппа кнопок, или GridLayout. Если вы не задаете родительский контейнер, MATLAB вызывает uifigure функция, чтобы создать новый Figure объект, который служит родительским контейнером.

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в одинарных кавычках (' '). Можно задать несколько имен и аргументов пары значения как Name1,Value1,...,NameN,ValueN.

Каждый тип Tree поддержка объектов различный набор свойств. Для полного списка свойств и описаний для каждого типа, смотрите связанную страницу свойств.

Больше о

свернуть все

SelectedNodes

В стандартном дереве или дереве флажка, выбранный узел обозначается синей подсветкой вокруг текста узла. Пользователь приложения может выбрать узел путем нажатия на текст узла.

В стандартном дереве с Multiselect набор свойств к 'off' и в каждом дереве флажка, самое большее один узел может быть выбран в любое время. В стандартном дереве можно установить Multiselect свойство к 'on' позволять, чтобы были выбраны несколько узлов.

В следующем изображении, Carrot узел выбран.

Проверенные узлы

В дереве флажка проверенный узел обозначается проверенным флажком слева от текста узла. Любое количество узлов может проверяться. Пользователь приложения может проверять или снять флажок с узлом путем нажатия на флажок. В стандартном дереве вы не можете проверять узлы.

В следующем изображении, Fruits, Apple, и Banana узлы проверяются.

Введенный в R2017b
Для просмотра документации необходимо авторизоваться на сайте