如何在MATLAB中使用列表框中的选项卡正确显示文本

时间:2016-04-03 20:01:12

标签: matlab listbox matlab-figure

我正在将文件中的文本插入到我的列表框中,它会忽略字符串之间的标签。我怎样才能使它不会忽略标签并按原样打印它?

我的文字档案:

05-WD-3052      19:56:07        03-Apr-2016
06-C-874414     19:57:03        03-Apr-2016
10-G-11         19:58:03        03-Apr-2016

列表框中的内容

enter image description here

我的代码:

fileID = fopen('Output/LicenseLog.txt','rt');
tScan = textscan(fileID, '%s','Delimiter','');
newScan = tScan{:};
set(handles.listbox1,'String',newScan);
fclose(fileID);

1 个答案:

答案 0 :(得分:3)

列表框与输入中的选项卡相关,但您使用的是可变宽度字体,因此文本不会像您期望的那样排列。您可以将列表框的FontName属性更改为'FixedWidth'以使用默认的固定宽度字体,也可以将其设置为您选择的任何fixed-width/monospaced font以获得预期结果:

data = {'05-WD-3052     19:56:07     03-Apr-2016', ...
        '06-C-874414    19:57:03     03-Apr-2016', ...
        '10-G-11        19:58:03     03-Apr-2016'};

u = uicontrol('Style', 'list', ...
              'FontName', 'FixedWidth', ...
              'String', data);

enter image description here

<强>更新

在仔细查看数据之后,问题是标签在多个系统,程序等中的显示方式不同。有些行实际上需要两个标签在GUI中查看时正确对齐所有内容。因此,您可能希望使用sprintf将使用制表符分隔的列表转换为具有显式空格的列表。

%// Split the string into groups based on the tabs
pieces = regexp(tScans{1}, '\t+', 'split');
for k = 1:numel(pieces)
    %// Create a 20-character wide padded string for each element
    data{k} = sprintf('%-20s', pieces{k}{:})
end

set(handles.listbox, 'String', data)

或者如果你想要一个单行:

data = cellfun(@(x)sprintf('%-20s', x{:}), regexp(tScan{1}, '\t+', 'split'), 'uni', 0);
set(handles.listbox, 'String', data)

当将它与上面提到的固定宽度字体结合使用时,你应该得到你想要的行为。

enter image description here