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