2015-09-24 2 views
-1

Я отчаянно пытаюсь создать графический интерфейс программно. Он должен показать следующие вещи:Как программно реализовать динамический GUI с помощью флажков и полос прокрутки?

enter image description here

где флажки на правой стороне статичны !! количество флажков слева зависит от пользователя!

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

К сожалению, я совершенно не знаком с созданием программного обеспечения 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

+0

Предоставленный код не повторить ошибку, описанную. Если ваш GUIDE GUI функционирует по желанию, почему вы создаете программный графический интерфейс? – excaza

+0

Оха, вы правы! есть ли возможность редактирования этого вопроса? я пропустил рассмотрение вещей ... Как GUIDE может управлять динамическим созданием флажков? Соответствующая цифра должна быть предопределена или я ошибаюсь? – john

+0

Да, это правильно. Тем не менее, одна из альтернатив, которую я предложил бы, это использовать ['uitable'] (http://www.mathworks.com/help/matlab/ref/uitable.html), который вы можете реализовать в GUIDE и можете содержать флажки. Он также обрабатывает прокрутку для вас. Я предпочитаю программный графический интерфейс лично, но здесь нет необходимости переделывать весь графический интерфейс. – excaza

ответ

0

Как указано в комментариях выше, в GUIDE доступны объекты uitable и уже включены флажки и прокрутка. В то время как я определенно предпочитаю программные ГПИ, я предпочитаю не иметь, чтобы воссоздать весь графический интерфейс, который уже функционирует :)

Вот небольшой программный пример (проще скопировать/вставить) для иллюстрации:

dummydata = {false 'Voltage Thingey 1'; ... 
      false 'Voltage Thingey 2'; ... 
      false 'Voltage Thingey 3' ... 
      }; 

mytable = uitable(... 
    'Data', dummydata, ... 
    'ColumnEditable', [true false], ... % Allow/disallow editing of our columns 
    'ColumnWidth', {'auto', 100}, ... % Width of column, in pixels 
    'ColumnName', [], ... % Get rid of column headers 
    'RowName', [] ...  % Get rid of row names 
    ); 

Какие дает нам:

yay!

+0

еще раз большое спасибо :) – john