如何指定何时返回函数的输出

时间:2013-11-18 18:33:57

标签: matlab

说我有以下功能:

function result=myfun(varargin)    
result=[];    
myFig=figure();    
B1=uicontrol(myFig,'Style','pushbutton','String','done','Callback',{@done_Callback});    

    function done_Callback(varargin)  
        result =10;
        delete(mainFig);
    end
end   

我试图仅在执行按钮回调后返回输出。现在它立即返回一个空变量。我知道如何在指南GUI中执行此操作,但我的所有项目都是在没有指导的情况下编写的。我假设我需要uiwait某处,但不知道在哪里。

1 个答案:

答案 0 :(得分:2)

函数uicontrol仅生成按钮,不等待按下按钮。否则,将无法使用具有多个元素的完整GUI - 在第一个元素未激活之前无法插入另一个元素,之后第一个元素无法再激活。因此,GUI回调在主Matlab程序之外的另一个线程中执行,即在“事件队列”中执行。

如果您希望程序等到按下按钮,则必须明确编程:

function result=myfun(varargin)    
result=[];    
myFig=figure();    
B1=uicontrol(myFig,'Style','pushbutton','String','done','Callback',{@done_Callback});    
while isempty(result)
    drawnow
end

    function done_Callback(varargin)  
        result =10;
        fprintf('hi\n')
        delete(myFig);
    end
end   

drawnow告诉Matlab它应该将执行时间分配给事件队列,这通常不会在Matlab忙时完成,例如运行while循环。

要获得(稍微)更多信息,请查看How Does a GUI Work?drawnow