Хотите переместить ползунок и все остальные обновления в Matlab? - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть графический интерфейс в Matlab, который я сделал, используя программный подход. Он имеет 6 ползунков, и я хочу иметь возможность перемещать один из них и обновлять остальные, как если бы я нажимал на них снова, но оставался на том же месте. Я предполагаю, что мне нужно будет использовать функцию set (). Есть ли какая-нибудь функция, чтобы сделать это в Matlab уже? Я искал вокруг. Любые предложения или что-то, чтобы указать мне в правильном направлении?

1 Ответ

1 голос
/ 15 февраля 2012

Если вы используете guide, вы можете получить доступ к другим ползункам из переменной handles, которая доступна в каждом обратном вызове.

Установите для них свойство Value.

   function Slider1_CallBack(hObj,evt,handles)
       set(handles.Slider1,'Value',10);
       set(handles.Slider2,'Value',10);
      % etc..
   end

Если вы используете его программно, вы можете сохранить handles вручную.

   function main
        handles.Figure1 = figure(..);
        handles.Slider1 = uicontrol(...);
        handles.Slider2 = uicontrol(...);
        guidata(handles.Figure1,handles);
   end

И ваш обратный вызов слайдера должен быть:

   function Slider1_CallBack(hObj,evt)
       handles = guidata(hObj);
       set(handles.Slider1,'Value',10);
       set(handles.Slider2,'Value',10);
      % etc..
   end

Редактировать Хорошей практикой написания пользовательского интерфейса является отделение логики графического интерфейса от фактических данных. Вы всегда меняете данные и вызываете updateGUI рутина.

Поэтому вы можете написать свою программу так:

   function main
        handles.gui.Figure1 = figure(..);
        handles.gui.Slider1 = uicontrol(...);
        handles.gui.Slider2 = uicontrol(...);

        handles.data.x = 1;
        guidata(handles.Figure1,handles);
   end

   function UpdateGui(handles)
        %Based on the data, update the GUI
        set(handles.Slider1,'Value',handles.data.x);
        set(handles.Slider2,'Value',handles.data.x+1);
   end 

И обратный вызов должен выглядеть так:

   function Slider1_CallBack(hObj,evt)
       handles = guidata(hObj);
       handles.data.x = handles.data.x  + 1;
       UpdateGui(handles);
       guidata(hObj,handles);
      % etc..
   end
...