【问题标题】:MATLAB: Retrieving GUI data from a loopMATLAB:从循环中检索 GUI 数据
【发布时间】:2017-05-09 13:56:37
【问题描述】:

以下场景中的最佳做法是什么:

我有一个在按下按钮时开始的循环,在执行过程中迭代应该通过 GUI 响应输入(例如滑块值的变化)。这在不间断循环中是不可能的,因此,一个可行但笨拙的解决方案是使用暂停,这样:

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

对于这个问题是否有其他更优雅的解决方案?

编辑:作为澄清,一个不起作用的变体(即不输出变化的滑块值):

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

【问题讨论】:

  • 当控件发生更改时,您是否需要使用单独的事件循环而不是使用 GUI 回调来执行操作?
  • 我需要循环来处理连续的数据流,只要我在循环中,就不会处理 GUI 回调(除非我包括暂停)。也许有一个我不知道的问题的无循环解决方案。你指的是这个吗?

标签: matlab user-interface


【解决方案1】:

您可以将滑块值更新为全局变量。

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

【讨论】:

  • 抱歉,我不确定您的回答如何解决我的问题。只要我处于不间断循环中,slider1_Callback 函数就不会被处理,因此我只能访问旧的 SliderValue。
  • @JohnSmith 将被处理。 Gui 似乎在单独的线程中运行,所以当你在循环中时,Gui 仍然可以响应你。但是,你不能使用guidata,因为在循环中,虽然guidata可以在其他函数中更新,但循环将继续使用旧数据。
  • 是的,您在技术上是正确的。但是,正如您所说,guidata 只会检索旧数据,这是问题的核心。
  • @JohnSmith 这就是为什么我建议使用global variable,它不绑定到appdata,而是在不同的函数、gui和脚本之间共享。
  • 啊,现在我明白了!我会试试你的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多