如何使用uicontrol回调函数更改变量?

时间:2014-02-20 23:10:43

标签: matlab callback

大图片的目标是以某种速率连续绘制图像序列,并在按下按钮时暂停该过程。然后在敲击空格键或按下按钮或其他任何东西时恢复该过程。这是我到目前为止的代码,对于循环的每次迭代都有一个简单的rand/pause(0.5)过程(而不是绘制我的图像)。

我的问题是: 按下按钮时似乎调用ButtonCallback,并且回调函数中DoPause设置为1,但主函数DoPause中的PauseButtonTest未更改。如何更改此变量以执行if循环中的while语句。

感谢任何帮助。感谢。

function PauseButtonTest

  DoPause = 0;

  hb = uicontrol('Style','Pushbutton','String','Pause','FontWeight','Bold', ...
    'Callback',@ButtonCallback,'Unit','Normalized','Position',[0 0 1 1]);

  while ishandle(hb)

    if DoPause
      disp('You pushed the button')
      pause
      DoPause = 0;
      set(hb,'Enable','On')
      drawnow
    end

    % Computations/Plot successive figures/etc.
    rand
    pause(0.5)

  end

end


function ButtonCallback(hObj, event)

  DoPause = 1;
  disp('You are in ButtonCallback')
  disp(['DoPause = ' num2str(DoPause)])
  set(hObj,'Enable','off')

end

1 个答案:

答案 0 :(得分:1)

Nested functions.

只需在function ButtonCallback(hObj, event) ...内移动PauseButtonTest,以便它可以访问其变量(“外部作用域”变量)。将它放在while循环下方和end之前的几行中,表示PauseButtonTest的结束。