显示在 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