2013-03-26 104 views
2

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

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

那么,从你的switch声明开始是不正确的和不必要的。下拉列表的Value属性不是当前选择中包含的文本,而是其当前选择列表中的索引。为了得到当前选择的列表项的字符串值,你会怎么做:

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

也就是说,当然,假设hObject是指向你的下拉框的手柄 - 这将是只有如果您这是由下拉本身引发的回调。此外,请注意有不需要通过discretised switch语句转换字符串值;您可以使用str2numstr2double函数。

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

+0

那么要调用的函数是单独的函数,它不在所有与GUI窗口函数相关的使用'handles'。 – Chethan 2013-03-26 18:43:19

+0

好的,但您可以在搜索按钮回调中访问“句柄”,因此您可以在**回调中获得'n'的值,并将其作为参数传递给您的单独函数。 – wakjah 2013-03-26 18:46:04

+0

是的,我想将它作为参数传递,但是在执行过程中多次调用相同的函数是否会产生任何效果?我需要的是,如果用户在菜单中选择'10',我的循环'n'应该被分配为'10'。所以输出将是10张图片。 – Chethan 2013-03-26 18:57:16

1

围绕GUI传递信息的方式是使用handles结构。如果您使用GUIDE handles创建GUI,则应该在打开功能中创建该GUI。您可以修改打开功能,将字段和初始值添加到handles。例如,您可以添加以下到开启功能:

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) 

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

+0

那么被调用的函数是独立的函数,它与GUI窗口函数使用'handles'完全不相关。上面提到的代码'for i = 1:n%存储前n个匹配...'是外部函数,它不在GUI窗口函数中。 – Chethan 2013-03-26 18:45:23

+0

查看我对我的回答所做的编辑。 – Molly 2013-03-26 18:53:22

+0

对不起,我没有得到'handles.n = 1;'会做什么..我需要的是如果用户在菜单中选择'10',我的for循环'n'应该被赋予'10' ,是的,我想将它作为参数传递,但是在执行过程中多次调用相同的函数会产生什么效果?所以输出将是10张图片。 – Chethan 2013-03-26 19:01:00