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