2017-05-08 39 views
0

什么是在以下情况下最好的做法:即在按下按钮,并在执行过程中的迭代应响应通过GUI来输入开始(如滑块值变化)MATLAB:从一个循环检索GUI数据

我有循环。这是不可能在一个不间断循环因此,因此,一个工作,但笨拙的解决方法是使用一个暂停这样的:

while true 
    get(handles.slider1,'value') 
    pause(0.5) 
end 

有没有其他的,更优雅的解决这个问题呢?

编辑:为澄清,变体不工作(即不输出变更用滑块值):

while true 
     get(handles.slider1,'value')  
end 
+0

是否有一个特定的原因,您需要使用单独的事件循环,而不是使用GUI回调来执行操作时对控件进行更改? – excaza

+0

我需要循环来处理连续的数据流,只要我在循环中,GUI回调将不会被处理(除非包含暂停)。也许有一个我没有意识到的问题的无循环解决方案。那就是你指的? –

回答

0

您可以更新滑块值到一个全局变量。

function slider1_Callback(hObject, eventdata, handles) 
global SliderValue; 
SliderValue = hObject.Value; 

然后从任何函数访问SliderValue

function pushbutton1_Callback(hObject, eventdata, handles) 
global SliderValue; 
while a<100 
    a = SliderValue + a; 
end 
+0

对不起,我不知道你的回答如何解决我的问题。只要我处于不可中断的循环中,slider1_Callback函数将不会被处理,因此我只能访问旧的SliderValue。 –

+0

@JohnSmith它将被处理。桂似乎是在一个单独的线程运行,所以当你在循环中,桂仍然可以回应你。但是,您不能使用guidata,因为在循环中,尽管guidata可以在其他函数中更新,循环将继续使用旧数据。 – Anthony

+0

是的,你在技术上是正确的。但是,正如你所说,guidata只能检索出问题核心的旧数据。 –