2017-08-11 35 views
2

我是MATLAB-GUI的新手。我看了几个video,我理解复选框是如何工作的(基础),但似乎你必须预先定义你将拥有的复选框的位置和数量。如何使用每行的复选框将表/结构导入GUI,然后将选择列表导出到MATLAB?

我在MATLAB表或结构(进口从CSV手法)

防爆第一饥荒预警系统列:

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

,我想在一个GUI“进口”(滚动框所有行右端的每行都有一个复选框),因此用户将选择他想使用的行(选中复选框)。

然后,当用户选择他想要在他的数据库中的所有行,我想导入/导出他们回到MATLAB(使用GUI作为过滤器,用户手动选择他想要的名称),按钮导入。

我需要做什么才能将选择行导入到右边的#checkbox中,考虑到行数会因时间而不同,并将它们导出到MATLAB以使用该列表?

+2

参见:表含混合数据类型](https://www.mathworks.com/help/matlab/ref/uitable.html#bvdu5y5-1) – excaza

回答

3

As described in the documentation通过@excaza链接,你可以通过创建一个uitable和追赶手柄做到这一点:

f = figure; 
t = uitable(f); 

,然后将数据(在单元阵列格式)增加t.data。探索t的属性,以获得更多可以以编程方式设置的内容! (可以通过在工作区中打开变量“t”来完成此操作,双击)

3

uitable的文档提供了an example作为一个很好的起点。然后,您可以使用诸如logical indexing之类的工具来寻址各种properties of your uitable object以获得所需的表格输出。

例如:

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工作空间演示GUI:

yay

+0

这个答案比我的好得多! –

+0

非常感谢!对不起,只是意识到我没有按上次发送的评论。这里真的很新鲜! :) –

+0

@MC_B如果其中一个答案帮助您解决了您的问题,请考虑点击答案左侧的绿色复选标记。 – excaza

相关问题