在某些用户事件上暂停Matlab脚本或函数

时间:2011-06-24 19:19:24

标签: matlab user-controls toggle

我知道Matlab有可能通过使用input()来暂停Matlab函数或脚本,因此当我有一个for循环并希望每次迭代都暂停它时:

for i = 1:N
  reply = input(sprintf('Pausing in iteration %d! Continue with Enter!', i), 's');

  % Calculations
end

但是如何使以下工作:通常它运行时不会暂停(好像input()不会在那里)但是当用户做某事时(可能按下一个键,一个按钮,或类似的东西在matlab中) ,脚本/函数执行PAUSE每次迭代,直到用户再次执行,因此这样的事情。例如。假设当按下某个热键组合e.h时,matlab有可能切换变量。 Ctrl + Alt + A在0到1之间切换变量myToggle,我可以很容易地做到:

for i = 1:N
  if(myToggle == 1)
    reply = input(sprintf('Pausing in iteration %d! Continue with Enter!', i), 's');
  end 

  % Calculations
end

提前致谢!

编辑:刚刚在这里找到了一个可能的解决方案:Function to ask a MATLAB program to wait for an event before continuing execution我可以在我的函数/脚本的开头创建一个文件,并在它不再存在时暂停下一次迭代。但这需要用户重命名不太“舒服”的文件...还有其他想法吗? :)

2 个答案:

答案 0 :(得分:4)

您可以使用带按钮的简单GUI;一旦按下执行暂停下一次迭代。

function testGUI()
    doPause = false;
    figure('menu','none', 'Position',[400 400 150 30])
    hb = uicontrol('Style','pushbutton', 'String','Pause', ...
        'Callback',@buttonCallback, 'Unit','Normalized', 'Position',[0 0 1 1]);
    %drawnow

    while ishandle(hb)
        %# check if the user wants to pause
        if doPause
            pause()             %# pauses until user press any key

            %# reset
            doPause = false;
            if ishandle(hb), set(hb, 'Enable','on'), drawnow, end
        end

        %# Calculations
        disp(rand), pause(.1)

        %# keep the GUI responsive
        drawnow
    end

    %# callback function for the button
    function buttonCallback(hObj,ev)
        doPause = true;
        set(hObj, 'Enable','off')
    end
end

答案 1 :(得分:1)

如果您只想暂停脚本运行直到用户按下返回,请考虑在MATLAB中使用pause命令