显示在GUIDE GUI初始化期间创建的轴和图

时间:2017-01-26 16:07:12

标签: matlab plot matlab-figure matlab-guide

我在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的窗口能够在屏幕上呈现,然后让情节功能在所有事情准备好后立即绘制,以便用户可以观察进度。

1 个答案:

答案 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