Я отчаянно пытаюсь создать графический интерфейс программно. Он должен показать следующие вещи:Как программно реализовать динамический GUI с помощью флажков и полос прокрутки?
где флажки на правой стороне статичны !! количество флажков слева зависит от пользователя!
Что я пытаюсь сделать, так это создать панель для динамических флажков с правой стороны и полосу прокрутки для этих панелей.
К сожалению, я совершенно не знаком с созданием программного обеспечения GUI. Пока все работает отлично с GUIDE.
Так что я был бы рад за вашу помощь.
Я нашел хороший пример
Adding scroll bar in subplots within GUI
за попадание в него с топорами, но я не получаю это адаптированный к флажков :( Это мой Try до сих пор.
%# create figure, panel, and slider
w = 600; h = 500; %# width/height of figure
handles.hFig = figure('Menubar','figure', 'Resize','off', ...
'Units','pixels', 'Position',[200 200 w h]);
handles.hPan = uipanel('Parent',handles.hFig, ...
'Units','pixels', 'Position',[0 0 w-20 h]);
handles.hSld = uicontrol('Parent',handles.hFig, ...
'Style','slider', 'Enable','off', ...
'Units','pixels', 'Position',[w-20 0 20 h], ...
'Min',0-eps, 'Max',0, 'Value',0, ...
'Callback',{@onSlide,handles.hPan});
%# add checkbox
hcb = zeros(7,1);
clr = lines(7);
for i=1:7
hcb(i) = addcheckbox(handles);
pause(1) %# slow down so that we can see the updates
end
функция ползунка не изменяется. И вот для меня самая проблемная функция:
function hcb = addcheckbox(handles)
%# look for checkboxes
cb = findobj(handles.hPan, 'type','checkbox');
if isempty(cb)
%# create first checkbox
hcb = uicontrol(handles.hFig,'Style','checkbox',...
'String','Display file extension',...
'Value',1,'Position',[30 20 130 20]);
else
%# get height of figure
p = get(handles.hFig, 'Position');
h = p(4);
%# increase panel height, and shift it to show new space
p = get(handles.hPan, 'Position');
set(handles.hPan, 'Position',[p(1) p(2)-h p(3) p(4)+h])
% %# compute position of new axis: append on top (y-shifted)
% p = get(ax, 'Position');
% if iscell(p), p = cell2mat(p); end
% p = [p(1,1) max(p(:,2))+h p(1,3) p(1,4)];
%
% %# create the new axis
% hAx = axes('Parent',handles.hPan, ...
% 'Units','pixels', 'Position',p);
%
% %# adjust slider, and call its callback function
% mx = get(handles.hSld, 'Max');
% set(handles.hSld, 'Max',mx+h, 'Min',0, 'Enable','on')
% %#set(handles.hSld, 'Value',mx+h) %# scroll to new space
% hgfeval(get(handles.hSld,'Callback'), handles.hSld, []);
end
end
Когда я исполняю его я получаю сообщение об ошибке:
Error using findobj
Invalid handle
Error in addcheckbox (line 3)
cb = findobj(handles.hPan, 'type','checkbox');
Этой ошибка имеет смысл Becaue я не имею ручки с именем флажков ... в примере «оси» является предопределенной ручкой, содержащейся на рисунке .. Как я могу интегрировать флажки в этом контексте?
Я был бы доволен за вашу помощь !! С уважением, John
Предоставленный код не повторить ошибку, описанную. Если ваш GUIDE GUI функционирует по желанию, почему вы создаете программный графический интерфейс? – excaza
Оха, вы правы! есть ли возможность редактирования этого вопроса? я пропустил рассмотрение вещей ... Как GUIDE может управлять динамическим созданием флажков? Соответствующая цифра должна быть предопределена или я ошибаюсь? – john
Да, это правильно. Тем не менее, одна из альтернатив, которую я предложил бы, это использовать ['uitable'] (http://www.mathworks.com/help/matlab/ref/uitable.html), который вы можете реализовать в GUIDE и можете содержать флажки. Он также обрабатывает прокрутку для вас. Я предпочитаю программный графический интерфейс лично, но здесь нет необходимости переделывать весь графический интерфейс. – excaza