2010-05-03 74 views
5

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

三行:

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')而忽略字符串组件。

+4

我不知道你为什么想要笑rten它到一条线,除非你只是好奇它是如何做到的。三线选项是最清楚和最容易理解的,并且是我在我写的任何代码中使用的选项。 – gnovice 2010-05-03 17:56:21

+1

@gnovice我主要想知道它是否可以完成。也许是MATLAB的好奇心和烦恼的混合体,因为没有一个功能可以通过一个打电话来完成。 – Doresoom 2010-05-03 18:03:45

回答

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 

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

+3

@Jonas:Touché,为我的强迫症问题提供了一个切实可行的解决方案。 – Doresoom 2010-05-03 18:11:33

+0

+1:正是我在想什么。 – gnovice 2010-05-03 18:11:46

+0

您必须从strcmp中删除逻辑NOT,如下所示:if〜ishandle(hh)|| strcmp(get(hh,'Type'),'popupmenu') – BAR 2012-11-18 03:26:31

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'})); 
+0

+1给我的回答,我真正想要的,但不切实际,它可能是 – Doresoom 2010-05-03 18:14:06

+1

+1用于回答问题的意图。 'cellfun' FTW! – Jonas 2010-05-03 18:40:12

5

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

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

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

+0

+1不耐:) – Jonas 2010-05-03 22:36:16

+0

+1我有一种感觉,当我问这个问题时我会看到这个:) – Doresoom 2010-05-04 14:10:17