MATLAB中的GUI弹出菜单

时间:2013-03-26 18:08:30

标签: matlab matlab-figure matlab-guide

我有一个弹出式菜单,其中包含5,10,15,20个菜单中的内容。使用开关我创建了这个

val=get(hobject,'value');
switch val
    case '5'
        n=5;
    case '10'
        n=10;
    case '15'
        n=15;
    case '20'
        n=20;
end
guidata(hObject, handles);

表示输出图像的数量。在同一GUI窗口中按下搜索按钮时,它调用另一个函数,我需要使用此'n'。

for i = 1:n          % Store top n matches...
    tempstr = char(resultNames(index(i)));
    fprintf(fid, '%s\r', tempstr);
    disp(resultNames(index(i)));
    disp(sortedValues(i));
    disp('  ')
end

如何将此'n'传递给该代码或函数? 任何正确的答案都是值得的。

2 个答案:

答案 0 :(得分:2)

好吧,从你的switch语句开始是不正确和不必要的。下拉列表的Value属性不是当前选择中包含的文本,而是列表中当前选择的索引。要获取当前所选列表项的字符串值,您可以执行以下操作:

contents = cellstr(get(hObject,'String')) % returns contents as cell array
contents{get(hObject,'Value')} % returns value of selected item from dropdown

当然,假设hObject是一个指向您的下拉框的句柄 - 如果您处于下拉列表引发的回调中,它将仅 本身。除此之外,请注意不需要通过离散的switch语句转换字符串值;您可以使用str2numstr2double函数。

最后,如果您需要从其自己的一个回调中访问下拉列表的值,则需要使用传递到每个回调的handles结构(或者,在您的示例中,返回该结构)来自guidata)。句柄中将有一个与您的下拉列表同名的字段 - 这将是您可以通过其访问其属性的句柄。

答案 1 :(得分:1)

围绕GUI传递信息的方法是使用handles结构。如果您使用GUIDE [{1}}创建了GUI,则应在open函数中创建。您可以修改开始函数以将字段和初始值添加到handles。例如,您可以将以下内容添加到打开功能:

handles

然后在回调中包含以下内容,以便菜单更新并存储n:

的值
handles.n = 1; % This initializes handles.n to a default value in case the search button is 
                % pushed before an item in the menu is selected. 

在搜索按钮的回调中,您可以访问n的值并将其传递给您的其他功能,如下所示:

handles.n = val; % This is updated every time an item from the menu is selected.  
guidata(hObject,handles); 

您的其他功能将从以下内容开始:

n = handles.n;
myFunction(n);

然后是上面包含的其余代码。您必须确保myFunction.m位于Matlab搜索路径中(可以使用function [] = myFunction(n) 或单击Matlab中的设置路径按钮进行设置。)