Возвратите popupmenu выбор в MATLAB с помощью одной строки кода

У меня есть GUI, который использует выбор от popupmenu в другом обратном вызове. Существует ли способ возвратить выбранное значение popupmenu только в одной строке, не создавая временных переменных? Я попробовал несколько решений, но я только управлял двумя строками с одной временной переменной:

Три строки:

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') и проигнорируйте строковый компонент в целом.

5
задан Doresoom 3 May 2010 в 18:19
поделиться

3 ответа

Вот однострочный текст:

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

Я знаю, что это не тот ответ, который вы искали, но он отвечает на вопрос вы спросили :)

11
ответ дан 18 December 2019 в 07:28
поделиться

Я знаю, что это глупо, но я не смог удержаться:

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

Я знаю, что это не то, что вы имели в виду, но, как и другие ответы выше, это отвечает на ваш вопрос... :-)

5
ответ дан 18 December 2019 в 07:28
поделиться

Чтобы сделать его однострочным, я бы просто создал свою собственную функцию (например, getMenuSelection ), как Йонас иллюстрирует в своем ответе . Если вы действительно хотите по-настоящему однострочник, вот тот, который использует 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'}));
5
ответ дан 18 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: