Как импортировать таблицу/структуру в графический интерфейс с флажком для каждой строки, а затем экспортировать список выбора в MATLAB?

Я новичок в MATLAB-GUI. Я смотрю пару видео и понимаю, как работает флажок (основа) но кажется, что вы должны заранее определить, где и сколько флажков у вас будет.

У меня есть таблица или структура в MATLAB (импорт из CSV с манипуляциями)

Пример первых нескольких столбцов:

Date      | Ticker | ShortName                     | RedCode
08-Jun-16 | NWS    | 21st Century Fox America, Inc.| 9J143F
08-Jun-16 | III    | 3i Group Plc                  | GOGCBA

То, что я хочу «импортировать» в графический интерфейс (поле прокрутки со всеми строками с флажком для каждой строки в правом конце), чтобы пользователь выбирал строки, которые он хочет использовать (установите флажок).

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

Что мне нужно сделать, чтобы импортировать выбранные строки с флажком # справа, учитывая, что количество строк будет отличаться от одного раза к другому, и экспортировать их обратно в MATLAB для использования этого списка?


person MC_B    schedule 11.08.2017    source источник
comment
См.: Таблица, содержащая смешанные типы данных   -  person excaza    schedule 11.08.2017


Ответы (2)


Как описано в документации, на которую ссылается @excaza, вы можете сделать это, создав uitable и поймав дескриптор:

f = figure;
t = uitable(f);

А затем добавить данные (в формате массива ячеек) в t.data. Изучите свойства t, чтобы узнать больше о том, что можно настроить программно! (вы можете сделать это, открыв переменную «t» в рабочей области, дважды щелкнув)

person Ander Biguri    schedule 11.08.2017

Документация для uitable содержит пример, который служит отличной отправной точкой. Затем вы можете использовать такие инструменты, как логическое индексирование. обращаться к различным свойствам вашего uitable объекта, чтобы получить желаемый вывод таблицы.

Например:

function testgui
% Set up some data
LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
tf = false(size(LastName));
T = table(Age, Height, Weight, tf);

% Build a GUI
f = figure('Name', 'A uitable', 'NumberTitle', 'off', 'MenuBar', 'none', 'ToolBar', 'none');
uit = uitable('Parent', f, 'Data', table2cell(T), ...
              'Units', 'Normalized', 'Position', [0.1, 0.15, 0.8, 0.8], ...              
              'RowName', LastName, 'ColumnName', {'Age', 'Height', 'Weight', 'Export?'}, ...
              'ColumnEditable', [false false false true]);
butt = uicontrol('Parent', f, 'Style', 'pushbutton', 'String', 'Export Data', ...
                 'Units', 'Normalized', 'Position', [0.1, 0.05, 0.8 0.1], ...
                 'Callback', @(h,e)table2workspace(uit));
end

function table2workspace(uit)
tmp = uit.Data(:, 4);  % Get the state of our checkboxes
exportbool = [tmp{:}];  % Denest the logicals from the cell array
outT = cell2table(uit.Data(exportbool, 1:3), 'VariableNames', uit.ColumnName(1:3), ...
                  'RowNames', uit.RowName(exportbool));
assignin('base', 'outT', outT);  % Dump to base MATLAB workspace for demo purposes
end

Это дает нам демонстрационный графический интерфейс, который мы можем использовать для вывода таблиц различных форм в базовое рабочее пространство MATLAB:

ура

person excaza    schedule 11.08.2017
comment
Этот ответ значительно лучше моего! - person Ander Biguri; 11.08.2017
comment
Большое спасибо ! Извините, просто поймите, что я не нажал «Отправить» в этом комментарии в прошлый раз. действительно новое здесь! :) - person MC_B; 08.11.2017
comment
@MC_B, если один из этих ответов помог вам решить вашу проблему, рассмотрите возможность нажатия на зеленую галочку слева от ответа. - person excaza; 08.11.2017