MATLAB中的GUI弹出菜单

MATLAB中的GUI弹出菜单,matlab,matlab-figure,matlab-guide,Matlab,Matlab Figure,Matlab Guide,我有一个弹出菜单,上面有5、10、15、20个菜单中的内容。使用switch我创建了这个 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窗口中按下搜

我有一个弹出菜单,上面有5、10、15、20个菜单中的内容。使用switch我创建了这个

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”传递给该代码或函数?
任何正确的答案都是值得注意的。

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

contents = cellstr(get(hObject,'String')) % returns contents as cell array
contents{get(hObject,'Value')} % returns value of selected item from dropdown
当然,也就是说,假设
hObject
是一个指向下拉框的句柄-只有在下拉框本身引发的回调中,它才会是。此外,请注意,不需要通过离散化的
开关
语句来转换字符串值;只需使用
str2num
str2double
函数即可


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

在GUI中传递信息的方法是使用
句柄结构。如果您使用GUIDE
创建GUI,则应在opening函数中创建句柄。您可以修改打开函数,将字段和初始值添加到
句柄中。例如,可以将以下内容添加到打开函数中:

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的值并将其传递给其他函数,如下所示:

n = handles.n;
myFunction(n);
function [] = myFunction(n)
您的其他功能将从以下内容开始:

n = handles.n;
myFunction(n);
function [] = myFunction(n)

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

要调用的函数是单独的函数,使用
句柄
与GUI窗口函数没有任何关系。可以,但您可以在搜索按钮回调中访问
句柄
,因此,您可以在回调中获得
n
的值,并将其作为参数传递给单独的函数。是的,我曾想过将其作为参数传递,但在执行过程中会多次调用同一个函数,这会产生任何效果吗?我需要的是,如果用户在菜单中选择“10”,则在我的for循环中,“n”应分配给“10”。因此,输出将是10个图像。除非循环发生时
n
的值发生变化,否则您不应该遇到问题。即使如此,如果您的搜索按钮回调调用带有参数
n
的单个函数,然后执行循环,则执行函数时,GUI无法更改
n
的值。我真的不明白问题是什么…新问题,要调用的函数中有这么多调用函数。它反复调用函数,因此在将
n
作为参数传递后,我遇到了一个错误<代码>???未定义的变量“handles”或类“handles.queryx”。在14 D=二次(handles.queryx,handles.querymap,X,HSVmap)处==>color出现错误;109色(n)处==>搜索窗口>搜索回调出错要调用的函数是单独的函数,使用
句柄与GUI窗口函数完全无关。上面提到的代码
用于i=1:n%Store top n matches…
是外部函数,不在GUI窗口函数中。很抱歉,我没有得到
处理的内容。n=1可以。。我需要的是,如果用户在菜单中选择“10”,那么在我的for循环中,“n”应该被分配到“10”,是的,我想把它作为一个参数传递,但是在执行过程中多次调用同一个函数,它会起作用吗?因此,输出将是10个图像。这将满足您的要求。句柄。n=1初始化该字段。菜单回调每次都会更新为用户选择的值。然后你必须给你的函数传递一个参数。如果菜单回调已更新句柄.n,则您的函数将有不同的输入。再次抱歉,哪一个是打开函数?如果您使用GUIDE创建GUI,则将有一个名为name\u OpeningFunction的函数,其中name是您为GUI指定的名称。