我在GUIDE中创建了一个Matlab gui。当我单击gui_A
中的按钮时,它会打开gui_B
的新图形窗口(两者的不同图形和m文件)。该图需要很长时间才能生成每个项目,因此我想在每个项目准备好后立即绘制。但是,我似乎无法弄清楚如何让窗口呈现FIRST,然后在其上绘制内容。我尝试过使用pause(1)
和drawnow
,但都没有达到预期的效果。以下是我正在做的一些示例代码:
gui_A
中的
function open_gui_b_btn(hObject, eventdata, handles)
gui_B(handles.var1, handles.var2);
gui_B
中的
function gui_B_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.var1 = varargin{1};
handles.var2 = varargin{2};
% set some variables here
% plot something on an axis
% Try to render on screen
% drawnow % doesn't work
% pause(1) % doesn't work
% plot the rest of the things
plot_things(handles)
function plot_things(handles)
for i = 1:length(handles.something)
% computationally expensive process
plot(handles.axis1, handles.var1b, handles.var2b);
end
显然我希望gui_B
的窗口能够在屏幕上呈现,然后让情节功能在所有事情准备好后立即绘制,以便用户可以观察进度。
答案 0 :(得分:0)
问题是,在加载GUI时,GUIDE将(默认情况下)将图形的Visible
属性设置为'off'
,以便可能不完整的GUI显示在用户。所有初始化完成后,它会将Visible
属性切换回'on'
。您可以通过在Visible
'on'
属性设置为OpeningFcn
来更改此行为
function gui_B_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.var1 = varargin{1};
handles.var2 = varargin{2};
% Make sure the figure is visible
set(hObject, 'Visible', 'on')
drawnow
或者您可以通过在函数调用中提供Visible
属性来初始化GUI
gui_B('Visible', 'on')
执行此操作后,您还需要在每个绘图命令后添加显式drawnow
命令,以便立即渲染图形。
function plot_things(handles)
for i = 1:length(handles.something)
% computationally expensive process
plot(handles.axis1, handles.var1b, handles.var2b);
% Draw each plot as it's available
drawnow
end