想要移动滑块,所有其他人在Matlab中更新?

时间:2012-02-14 23:02:25

标签: user-interface matlab matlab-guide

我在Matlab中使用了Programmatic方法制作的GUI。它有6个滑块,我希望能够移动其中一个并让其他人更新,好像我再次点击它们但留在同一个地方。我猜我需要使用set()函数。在matlab中是否有一些功能可以做到这一点?我一直在四处看看。是否有任何建议或指示我指向正确的方向?

1 个答案:

答案 0 :(得分:1)

如果您使用guide,则可以从每个回调中可用的handles变量访问其他滑块。

为他们设置Value属性。

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

如果您以programmaticaly方式使用它,则可以手动存储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

编辑编写UI的一个好习惯是将GUI逻辑与实际数据分开。您始终更改数据,并调用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