2

我在 Matlab 中有使用程序化方法制作的 GUI。它有 6 个滑块,我希望能够移动其中一个并让其他滑块更新,就像我再次单击它们但留在同一个地方一样。我猜我需要使用 set() 函数。matlab中是否有一些功能可以做到这一点?我一直在环顾四周。有什么建议或什么可以为我指明正确的方向吗?

4

1 回答 1

1

如果您正在使用,则可以从每个回调中可用的变量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

编辑编写 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
于 2012-02-14T23:14:38.337 回答