显示在 GUIDE GUI 初始化期间创建的轴和图
Show axes and plots as they are created during GUIDE GUI initialization
我有一个在 GUIDE 中创建的 Matlab 图形用户界面。当我单击 gui_A
中的按钮时,它会为 gui_B
打开一个新图形 window(两者的 fig 和 m 文件不同)。绘图需要很长时间才能生成其上的每个项目,因此我想在每个项目准备就绪后立即对其进行绘图。但是,我似乎无法弄清楚如何让 window 首先渲染,然后在其上绘制东西。我试过使用 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
的 window 在屏幕上呈现,然后让 plot things 函数在它们准备好后立即绘制所有事物,以便用户可以观看进步。
问题是加载 GUI 时,GUIDE(默认情况下)会将图形的 Visible
属性 设置为 'off'
,这样可能不完整的 GUI 就不会显示给用户。它将在所有初始化完成后将 Visible
属性 切换回 'on'
。您可以通过在 OpeningFcn
中手动将 Visible
属性 设置为 'on'
来更改此行为
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
我有一个在 GUIDE 中创建的 Matlab 图形用户界面。当我单击 gui_A
中的按钮时,它会为 gui_B
打开一个新图形 window(两者的 fig 和 m 文件不同)。绘图需要很长时间才能生成其上的每个项目,因此我想在每个项目准备就绪后立即对其进行绘图。但是,我似乎无法弄清楚如何让 window 首先渲染,然后在其上绘制东西。我试过使用 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
的 window 在屏幕上呈现,然后让 plot things 函数在它们准备好后立即绘制所有事物,以便用户可以观看进步。
问题是加载 GUI 时,GUIDE(默认情况下)会将图形的 Visible
属性 设置为 'off'
,这样可能不完整的 GUI 就不会显示给用户。它将在所有初始化完成后将 Visible
属性 切换回 'on'
。您可以通过在 OpeningFcn
Visible
属性 设置为 'on'
来更改此行为
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