说我有以下功能:
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某处,但不知道在哪里。
答案 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
。