WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Static Text in fremden GUI ansprechen

 

Coelophysis
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.07.16
Wohnort: ---
Version: R2013b 64 Bit
     Beitrag Verfasst am: 02.08.2016, 11:03     Titel: Static Text in fremden GUI ansprechen
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein GUI "A" erstellt, mit dem ich über einen Button ein zweites GUI "B" starte. In GUI "B" findet eine Auswahl statt, die nach Bestätigung und Schließen von B in einem Static Text in A angezeigt werden soll.

Das Problem ist, dass ich das ja im Callback für den OK-Button in B schreiben müsste. A bleibt dabei geöffnet. Wie spreche ich denn jetzt das fremde geöffnete GUI "A" und seinen Static Text an? Ich finde leider nirgends eine Syntax dafür.

Vielen Dank und schöne Grüße!

Coelo
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2016, 13:14     Titel:
  Antworten mit Zitat      
Hallo,

du kannst den Aufruf aus A mit
Code:
Output = B;

machen und in der OutputFcn der GUI definieren, was zurückgegeben werden soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Coelophysis
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.07.16
Wohnort: ---
Version: R2013b 64 Bit
     Beitrag Verfasst am: 02.08.2016, 14:19     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort!

Aber das kriege ich noch nicht so richtig eingebaut.

ertses GUI: EF
zweites GUI: Selection
Button select in GUI "EF" ruft GUI "Selection" auf
Button Ok beendet GUI "Selection" und schreibt in ListeX (StaticText) in GUI "EF".

Ich habe das Output = EF in die Callback Funktion des Buttons in Selection geschrieben. Die OutputFcn wird aber irgendwie immer beim Aufrufen der GUIs schon abgearbeitet...

Aber irgendwie ist das alles noch nicht da, wo es hingehört.

Code:

%Callback für den Button OK im GUI Selection
function OK_Callback(hObject, eventdata, handles)
Output=EF;
close('Selection');

%Output für das GUI Selection
function varargout = Selection_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
Liste = evalin('base','Liste_EingX');
set(handles.ListeX,'String',Liste);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2016, 15:42     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die OutputFcn wird aber irgendwie immer beim Aufrufen der GUIs schon abgearbeitet...

uiwait in die OpeningFcn von Selection, und uiresume wenn die Eingabe bestätigt ist.

evalin ist in den seltensten Fällen notwendig und sollte vermieden werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Coelophysis
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.07.16
Wohnort: ---
Version: R2013b 64 Bit
     Beitrag Verfasst am: 02.08.2016, 17:31     Titel:
  Antworten mit Zitat      
Aber jetzt weiß ich doch immer noch nicht, wo das Output = ?? rein kommt. Es müsste doch im Code stehen, der das GUI B schließt, also in OK_Callback (GUI B) steht Output = A; oder sehe ich das falsch? Und wo arbeitet Matlab dann weiter? Startet es dann die OutputFnc von GUI A? Muss dann auch in A selbst der Code zum Ändern von A rein oder steht das im OutputFcn von B oder wo kommt das rein?

Andere Beispiele arbeiten immer mit der varargout, aber es geht mir ja gar nicht um den Wert, der in B ausgewählt wurde. Den schreibe ich ja eh in eine Variable, weil ich den später noch brauche. Ich will nur, dass sich GUI A nach dem Schließen von B verändert...

Ich sage Bescheid, wenn ich es habe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2016, 19:22     Titel:
  Antworten mit Zitat      
Hallo,

wenn du nur Bruchstücke zur Verfügung stellst, ist es entsprechend schwierig, dir weiterzuhelfen.

Zitat:
OK_Callback (GUI B) steht Output = A; oder sehe ich das falsch?

Wenn GUI B von GUI A aufgerufen wird, dann genau umgekehrt.

Deine weiteren Fragen sind mir nicht klar.

Zitat:

aber es geht mir ja gar nicht um den Wert, der in B ausgewählt wurde. Den schreibe ich ja eh in eine Variable, weil ich den später noch brauche.

... und was passiert mit dieser Variable nach Beendigung der GUI, wenn du nicht irgendwelche Krücken wie evalin/assignin verwendest? Es gibt sie nicht mehr.

Zitat:
Ich will nur, dass sich GUI A nach dem Schließen von B verändert...

Und dazu ist es das vernünftigste, die benötigten Informationen von B nach A zurückzugeben.

Am einfachsten wäre es, wenn du ein (abgespecktes) Beispiel zur Verfügung stellen kannst. Ansonsten wird's schwierig.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Coelophysis
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 18.07.16
Wohnort: ---
Version: R2013b 64 Bit
     Beitrag Verfasst am: 09.08.2016, 08:57     Titel:
  Antworten mit Zitat      
Jetzt habe ich mal ein bisschen weitergemacht und ein übersichtlicheres Beispiel formuliert. Dabei enthält das GUI "EF" die drei Textboxen "Filepath", "Filename" und "Filetype", deren Strings später einen Speicherpfad ergeben und an das Skript "Boxplots" weitergegeben werden.

Im Output von EF steht:

Code:
% --- Outputs from this function are returned to the command line.
function varargout = EF_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
Filename = get(handles.Filename,'String');
Filepath = get(handles.Filepath,'String');
Filetype = get(handles.Filetype,'String');


Ich nehme an, dass ich die varargout{1 bis 3} benutzen muss. Ich habe derartiges in der Matlabhilfe gefunden, was ich aber nicht umgesetzt bekomme:

Code:
function [s,varargout] = sizeout(x)
nout = max(nargout,1) - 1;
s = size(x);
for k = 1:nout
   varargout{k} = s(k);
end


Hier werden die einzelnen varargout{1:n} ja auch in der for-Schleife belegt. Aber die Syntax der ersten Zeile in der Hilfe passt doch nicht zur Sytax, die automatisch in der OutputFcn erstellt wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.08.2016, 16:50     Titel:
  Antworten mit Zitat      
Hallo,

grundsätzlich sind beide Varianten möglich.
Da es in GUIDE so vorgesehen ist, solltest du dich auch daran halten. Du brauchst also nur varargin{k} definieren, das mit dem s kannst du einfach weglassen.

Meine Empfehlung wäre, alle benötigten Infos in einer Struktur zusammenzufassen, so dass du nur ein Argument zurückgibst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.