使用一行代码在MATLAB中返回弹出菜单选择

时间:2010-05-03 17:48:06

标签: user-interface matlab popupmenu

我有一个GUI,它使用另一个回调中弹出菜单的选择。有没有办法只在一行中返回弹出菜单的选定值而不创建任何临时变量?我尝试了几种解决方案,但我只用一个临时变量管理了两行:

三行:

list=get(handles.popupmenu1,'String');
val=get(handles.popupmenu1,'Value');
str=list{val};

两行:

temp=get(handles.popupmenu1,{'String','Value'});
str=temp{1}{temp{2}};

任何人都可以把它剃成一个吗?

PS,这是一个动态菜单,所以我不能只使用get(handles.popupmenu1,'Value')并完全忽略字符串组件。

3 个答案:

答案 0 :(得分:11)

这是一个单行:

str = getCurrentPopupString(handles.popupmenu1);

以下是getCurrentPopupString

的定义
function str = getCurrentPopupString(hh)
%# getCurrentPopupString returns the currently selected string in the popupmenu with handle hh

%# could test input here
if ~ishandle(hh) || strcmp(get(hh,'Type'),'popupmenu')
error('getCurrentPopupString needs a handle to a popupmenu as input')
end

%# get the string - do it the readable way
list = get(hh,'String');
val = get(hh,'Value');
if iscell(list)
   str = list{val};
else
   str = list(val,:);
end

我知道这不是你要找的答案,但它确实回答了你提出的问题:)

答案 1 :(得分:5)

为了使它成为一个单行,我只需创建我自己的函数(即getMenuSelection),如Jonas在他的答案中说明。如果你真的想要一个真正的单行,那么这里有一个使用CELLFUN

str = cellfun(@(a,b) a{b},{get(handles.popupmenu1,'String')},{get(handles.popupmenu1,'Value')});

非常丑陋且难以阅读。我一定会去写自己的功能。

编辑:这是使用FEVAL的一个稍短(但仍然同样丑陋)的单线:

str = feval(@(x) x{1}{x{2}},get(handles.popupmenu1,{'String','Value'}));

答案 2 :(得分:5)

我知道这是愚蠢的,但我无法抗拒:

list=get(handles.popupmenu1,'String'); str=list{get(handles.popupmenu1,'Value')};

我知道这不是你的意思,但就像上面的其他答案一样,它确实回答了你的问题......: - )