我正在尝试将使用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
答案 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