2009-06-17 7 views
0

Wenn ich versuche, eine Unterfunktion in einer GUI/GUIDE-Datei (mit einem Funktions-Handle, die als globale Variable ausgesetzt wurde) aufzurufen, wird immer eine neue Achsen erstellt, auch wenn ich gesetzt die Achsen zu einer bestimmten Achse in der GUIDE Abbildung. Weiß jemand, warum das passiert? GUIDE-Code ist:MATLAB: Aufruf GUI/GUIDE-Funktionen von außerhalb

############################################################### 
function varargout = demo(varargin) 
    % Begin initialization code - DO NOT EDIT 
    gui_Singleton = 1; 
    gui_State = struct('gui_Name',  mfilename, ... 
        'gui_Singleton', gui_Singleton, ... 
        'gui_OpeningFcn', @demo_OpeningFcn, ... 
        'gui_OutputFcn', @demo_OutputFcn, ... 
        'gui_LayoutFcn', [] , ... 
        'gui_Callback', []); 
    if nargin && ischar(varargin{1}) 
     gui_State.gui_Callback = str2func(varargin{1}); 
    end 

    if nargout 
     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); 
    else 
     gui_mainfcn(gui_State, varargin{:}); 
    end 
    % End initialization code - DO NOT EDIT 

function demo_OpeningFcn(hObject, eventdata, handles, varargin) 
    handles.output = hObject; 

    % Update handles structure 
    guidata(hObject, handles); 

    global myhandles updateFunction; 
    myhandles = handles; 
    updateFunction = @update; 

function varargout = demo_OutputFcn(hObject, eventdata, handles) 
    varargout{1} = handles.output; 

function pushbutton1_Callback(hObject, eventdata, handles) 
    update(); 

function update() 
    global myhandles; 

    axes(myhandles.axes1); 
    plot(1:2,1:2); 

########################################################################### 

Und wenn ich (außerhalb Datei oben):

global updateFunction; 
feval(updateFunction) 

Ich sehe immer die Handlung in einem neu Figur Fenster erstellt, nicht in der GUI-Figur. Warum passiert dies?

+0

Wir sollten die Update-Funktion sehen. Das ist ziemlich wichtig, um dir zu helfen. Außerdem sind globale Variablen in der Regel nicht erforderlich und machen Ihren Code oft schwieriger zu warten. Vielleicht möchten Sie Ihren Code auf andere Weise strukturieren. – MatlabDoug

Antwort

2

Das erste, was ich versuchen würde, ist die Funktion Update mit dem folgenden ersetzen:

function update 
    global myhandles; 
    plot(myhandles.axes1,1:2,1:2); 

Dies wird explizit die PLOT Funktion sagen, in den angegebenen Achsen zu zeichnen. Wenn das nicht funktioniert, versuchen Sie die Achsen 'NextPlot' Eigenschaft auf 'Add' (wahrscheinlich in demo_OpeningFcn):

set(myhandles.axes1,'NextPlot','add'); 
0

standardmäßig, wenn Sie eine GUI GUIDE erstellen, setzt Matlab die ‚HandleVisibility 'Eigenschaft aller Objekte, die mit der GUI verbunden sind' Rückruf '. Das bedeutet, dass Sie diese Handles nicht als die aktuelle Zahl oder die aktuelle Achse von einer beliebigen Stelle außerhalb der Callback-Routinen (dh von der Befehlszeile oder einer externen Funktion) festlegen können.

Um dies zu umgehen, können Sie entweder das entsprechende Handle explizit in allen Plotfunktionen angeben oder Sie können die Eigenschaft 'HandleVisibility' der Achsen auf 'on' setzen. Dies kann Objekt für Objekt über den Eigenschafteninspektor oder für die gesamte GUI erfolgen, indem Sie zu "Extras -> GUI-Optionen ..." gehen und die "Befehlszeilen-Zugänglichkeit:" auf "Ein" setzen.