将文件夹的图像名称加载到Matlab列表框中

时间:2015-01-25 09:06:18

标签: matlab listbox matlab-guide

我正在尝试将使用matlab GUI选择的特定文件夹中存在的所有图像名称加载到列表框中。

问题是当我选择文件夹时:

如果它是空的,我可以看到列表为空白,背景为白色(这是正确的)。

但是当我选择包含图像的文件夹时,列表框会从GUI中消失。我收到警告说:

警告:单选列表框控件需要标量值

在所有参数值有效

之前,不会呈现控件

我在这个问题上遇到了很长时间,我找不到解决问题的方法。

这是我试过的代码:

 % --- Load up the listbox with tif files in folder handles.handles.ImageFolder
function handles=LoadImageList(handles) 

    ListOfImageNames = {};
    folder = handles.ImageFolder;



    if ~isempty(handles.ImageFolder) 
        if exist(folder,'dir') == false
            warningMessage = sprintf('Note: the folder used when this program was last run:\n%s\ndoes not exist on this computer.\nPlease run Step 1 to select an image folder.', handles.ImageFolder);
            msgboxw(warningMessage);
            return;
        end
    else
        msgboxw('No folder specified as input for function LoadImageList.');
        return;
    end
    % If it gets to here, the folder is good.


    ImageFiles = dir([handles.ImageFolder '/*.*']);
    for Index = 1:length(ImageFiles)
        baseFileName = ImageFiles(Index).name;
        [folder, name, extension] = fileparts(baseFileName);
        extension = upper(extension);
        switch lower(extension)
        case {'.png', '.bmp', '.jpg', '.tif', '.avi'}
            % Allow only PNG, TIF, JPG, or BMP images
            ListOfImageNames = [ListOfImageNames baseFileName];
        otherwise
        end
    end
    set(handles.lstImageList,'string',ListOfImageNames);


    return

2 个答案:

答案 0 :(得分:2)

当Matlab uicontrol中的某些参数设置为无效值时,会发生这种情况。 Matlab选择不显示它们。

在您的情况下,错误消息会告诉您Value参数不正确。

您的listbox被定义为“单一选择”,这意味着您一次只能选择一行。 Value参数表示所选的行号。此参数必须是“标量”,单个数字,而不是表示选定多行的矢量(可以使用“多选”列表框)。

请注意,Matlab也不支持空Value,因此,如果您的Value设置为[],则填充lisbox时也会出错。 (至少不在我的R2009a版本上)

解决这个问题的简单方法是在填充Value的同时设置listbox

set(handles.lstImageList,'string',ListOfImageNames,'Value',1);

答案 1 :(得分:1)

问题在于您创建ListOfImageNames的方式。代码的结果是一个包含所有图像名称的长字符串,没有任何空格或分隔符 MATLAB String的{​​{1}}属性期望具有每行条带的单元阵列。你可以试试这个:

listbox