Mein Wunsch ist es, einen Benutzer Daten auswählen zu lassen, eine Menge Dinge zu tun, dann eine GUI zu rufen jemand anderes schrieb (GUI3) und varA, varB und varC zurückgeben der Arbeitsbereich.Der effizienteste Weg, mehrere GUIs in Matlab aufzurufen
Im Moment habe ich GUI1, die nur eine Taste ist, Daten zu laden und enthält:
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
close
function pushbutton1_Callback(hObject, eventdata, handles)
[filename, pathname] = uigetfile({'*.7';'*.m';'*.mat';'*.*'}, 'Select a .pfile');
pfilepath=fullfile(pathname,filename);
[handles.tempD,handles.tempE,handles.tempF] = functionF(pfilepath);
guidata(hObject, handles);
[varA,varB,varC]=GUI2(handles);
handles.varA=varA;
handles.varB=varB;
handles.varC=varC;
guidata(hObject,handles) ;
uiresume
GUI2 tut die meiste Arbeit:
function GUI2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.tempD = varargin{1}.tempD;
handles.tempD = varargin{1}.tempE;
%%% does things with tempD and tempE and displays things...
guidata(hObject,handles)
uiwait
%%% other functions allow user to interact with data and create tempN
function varargout = GUI1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.varA;
varargout{2} = handles.varB;
varargout{3} = handles.varC;
uiresume
function btnReady_Callback(hObject, ~, handles)
handles = guidata(hObject);
%%% does a bunch of stuff that eventually creates varA
[varB,varC]=GUI3(handles.tempD,handles.tempE,handles.tempN)
guidata(hObject, handles);
uiresume
Und GUI3 hat ein paar Sachen intern und zeigt dann einige der Daten an.
Im Moment bleiben alle GUIs offen, bis GUI3 geschlossen ist. An diesem Punkt werden alle geschlossen und die Variablen gehen in den Arbeitsbereich. Im Idealfall möchte ich die Variablen sofort nach der Berechnung in den Arbeitsbereich bringen und den Benutzer dazu veranlassen, GUI2 und GUI3 offen zu lassen, wenn sie möchten. Ich möchte auch, dass die GUI1 schließt, sobald die Taste gedrückt wird, aber alles andere noch laufen lässt.
Also meine Fragen: 1) Wie bekomme ich varargout sofort in den Arbeitsbereich, bevor die GUI geschlossen ist? 2) Wie schließe ich eine Figur für eine GUI, aber lasse sie andere Funktionen und GUIS aufrufen? 3) Gibt es eine effizientere Möglichkeit, diese .m-Dateien zu kombinieren, so dass die Daten reibungsloser übertragen werden und es weniger Möglichkeiten gibt, etwas zu vermasseln?
Auch jetzt gibt es zurück und Fehler von GUI2 btnReady_Callback: H muss der Handle zu einer Figur oder Figur nachkommen.
Ich habe so lange versucht, die Regeln zu verstehen, dass ich gründlich verwirrt bin.
Vielen Dank für die Einsicht zu koordinieren.Wenn ich die uiwait und uiresume herausnehmen würde, würde das die Funktionalität zerstören (in GUI 2 zeige ich Bilder an, lasse den Benutzer ROIS zeichnen und mache dann mehr Berechnungen auf Knopfdruck)? GUI1 existiert, weil, als ich das Projekt startete ich nicht genug über GUIS wusste und konnte GUI2 nur zum Starten mit den bereits ausgewählten Dateien erstellen. Eine Nicht-GUI-Funktion zum Koordinieren des Öffnens und Schließens anderer GUIS wäre perfekt. Gibt es einen Post oder ein Tutorial, die du empfehlen kannst, um das zu erklären? –
OK! Ich könnte tun (1) mit assignin (das half auch: https://www.mathworks.com/matlabcentral/answers/7517-from-gui-to-workspace), da ich keine Sorge über das Überschreiben von Benutzer Variablen (2) Ich entfernte die Vargouts von GUI1_OutputFcn, so dass es aufgerufen werden kann, ohne die Namen der Ausgabevariablen anzugeben, da GUI2 assignin verwendet, und ich delete (get (hObject, 'parent')); in GUI1 sofort nach dem Aufruf von GUI2, damit GUI1 schließt. Ja! –