Как сделать объект текущим в графическом интерфейсе Matlab?

Я создаю функцию «sng_figureslide», которая создает ползунок, который может скользить по всем уже созданным фигурам. Я должен нажать на ползунок, чтобы иметь возможность управлять им с помощью клавиш со стрелками.

Мне интересно, можно ли сделать объект ползунка активным, когда я вызываю функцию, поэтому мне не нужно заранее нажимать на ползунок.

function sng_figureslide

figh=findobj('type','figure');
figs=numel(figh);

% if there are one or zero figures, the slider does not appear
if figs > 1
    sliderstep = 1/(figs-1);
else
    return
end

fignumber = cell2mat(get(figh,'Number'));
sliderfignumber = max(fignumber) + 1;
figure(max(fignumber) +1)
set(gcf,'position',[360 190 560 36]);
set(gcf,'Toolbar','none');
a=annotation('textbox',[0.03 0.2 0.1 0.7],'String',num2str(figs));

uicontrol('Style', 'slider',...
    'Min',1,'Max',figs,'Value',figs,...  
    'Position', [80 10 470 20],...  
    'Callback', {@slider1,figh,a,figs,fignumber,sliderfignumber},...      
    'SliderStep', [sliderstep sliderstep]);
end

function slider1(hObj,~,figh,a,figs,fignumber,sliderfignumber)
    Val = round(get(hObj,'Value'));
    set(a,'String',num2str(Val));
    figure(figh(Val));
    figure(sliderfignumber);
end

Кроме того, я думаю, что эта функция очень полезна для многих людей, поэтому не стесняйтесь ее использовать.


person S Geurts    schedule 05.08.2016    source источник
comment
Вы можете установить WindowKeyPressFcn для захвата событий клавиш со стрелками и обновления ползунка для вас.   -  person Suever    schedule 05.08.2016


Ответы (1)


Когда вы создаете uicontrol, сохраните его дескриптор. Затем передайте этот дескриптор обратно в функцию uicontrol.

h = uicontrol ( .... )
uicontrol ( h );
person matlabgui    schedule 05.08.2016
comment
Ваше решение было довольно простым и понятным. Ткс! Иногда я просто не вижу простых. - person S Geurts; 05.08.2016