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

Handles zwischen GUIs übergeben

 

daniatic
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2010, 17:56     Titel: Handles zwischen GUIs übergeben
  Antworten mit Zitat      
Hallo
ich bin schon den ganzen Tag auf der Suche nach einer Lösung für mein Problem. Konnte aber bisher nichts finden.

Mein Problem:
Ich habe ein GUI geschrieben(ohne Guide), das aus 3 Figures besteht. Insgesamt sind es 4 m-files. Jeweils ein m-file für die einzelnen figures und ein m-file was die 3 m-files startet und somit alle figures erscheinen lässt. Wie kann ich nun erreichen dass die 3 figures gegenseitig auf ihre handles zugreifen können?
Ich möchte das elegant lösen und nicht mit globalen variablen oder findobj.
Mit setappdata/getappdata habe ich probiert die handles in die jeweilgen figures zu schreiben und so auf sie zuzugreifen. Jedoch klappt das auch nicht.

Vielen Dank im Voraus
Gruß Daniel
Private Nachricht senden Benutzer-Profile anzeigen


yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 20.08.2010, 08:47     Titel:
  Antworten mit Zitat      
Moin Daniel,

schau doch mal hier:
http://www.gomatlab.de/2-guis-werte-uebergeben-t4433.html
(habe in der Forumssuche "gui handles übergeben" eingetippt.)

HTH,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
daniatic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2010, 09:32     Titel:
  Antworten mit Zitat      
Den Thread hatte ich auch schon gefunden, aber da waren meine Nerven wohl schon am Ende. Ich bin dabei es so zu probieren, nur habe ich noch ein paar Fragen.

Code:
setappdata(0,'name',value);

Wo werden die Daten jetzt hingespeicher? Anders gefragt was oder wo ist 0?

Ich habe die GUI nicht über GUIDE erstellt, sondern manuell. Jetzt habe ich sehr viele manuell benannt handles. Muss ich die jetzt alle über
Code:
a=get(handle_name)
setappdata(0,'neuer_handle_name',a)

einzeln abspeichern? Oder gibt es dafür einen anderen weg?

Zum Verständnis:
In der anderen GUI kann ich dann über
Code:
b=getappdata(0,'neuer_handle_name')

auf das handle zugreifen?
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 20.08.2010, 10:02     Titel:
  Antworten mit Zitat      
Moin Daniel,

ich habe den anderen Thread nicht ausprobiert und Du hast eine Frage zum manuell erstellten. Was aber von der Funktionalität dann wohl eigentlich doch das gleiche ist.

setappdata(0,...) beinhaltet, wie die Hilfe sagt, an erster Stelle das Handle der Figur.
Das ist bei eigentlich allen Funktionen, denen man ein Handle übergeben muss, der Fall. Zuerst das Handle, dann der Rest an Parametern.

0 wird wohl das handle der ersten Gui sein. Ich vermute weiterhin, dass Du nur die eine handles-Struktur übergeben musst, was dann nur eine Übergabe bedeutet. Schließlich wird ja empfehlenswerterweise alles in jeder Gui im eigenen handles gespeichert.

FF,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.08.2010, 10:17     Titel:
  Antworten mit Zitat      
Hallo

Null steht für ROOT, also die Konsole. Damit alles was dort abgespeichert, ist global verfügbar.
Private Nachricht senden Benutzer-Profile anzeigen
 
daniatic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2010, 10:34     Titel:
  Antworten mit Zitat      
Ok vielen Dank für die Hilfe! Mit setappdata(0,'.. funktioniert es jetzt soweit.
Wenn ich das richtig verstanden habe, muss ich die handles alle manuell in eine structure speicher um sie dann zu übergeben. Die handles structure mit allen handles wird nur bei guide automatisch erstellt, richtig?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.08.2010, 10:50     Titel:
  Antworten mit Zitat      
Hallo,
Jain, GUIDE generiert automatisch die M-Files, dort wird an OpeningFcn
dann die Handle-Struktur übergeben.

Man kann mit GUIDE auch nur Oberfläche erstellen
und dann eigene Scripts schreiben. Die Handles bekommt man dann über
Code:

fig=figure;
handles = guihandles(fig)
 


Aber, da je über Scripts die Oberfläche konstruierst, dann kannst auch gleich die handles dort aufsammeln
Private Nachricht senden Benutzer-Profile anzeigen
 
daniatic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2010, 11:03     Titel:
  Antworten mit Zitat      
Zitat:
Aber, da je über Scripts die Oberfläche konstruierst, dann kannst auch gleich die handles dort aufsammeln


Ja das mache ich gerade auch, aber alles manuell.
Ich erstelle mit uicontrol und packe dann den handle in eine structure und speichere am ende die structure mit setappdata ab.
Ungefähr so:
Code:
handle_figure = figure(...);
handles.figure = handle_figure;
handle_listbox = uicontrol('Style','listbox');
handles.listbox = handle_listbox;
setappdata(0,'handles',handles)
 


Geht das auch automatisch? Da bei 30 Elemente die Tiparbeit etwas nervig wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 20.08.2010, 11:39     Titel:
  Antworten mit Zitat      
Nö, automatisch geht das nicht.
Du musst am Ende jeder Callback-Funktion auch selbst das wichtige guidata(hObject, eventdata); einfügen.
Ich würde allerdings es so vereinbaren:
Code:
% die wichtigen Sachen wie 'Tag' und 'Parent' etc. nicht zu vergessen. Immerhin erhält alles einen Standardwert, das nicht definiert wird.
handles.figure = figure(...);
handles.listbox = uicontrol('Style','listbox');
setappdata(0,'handles',handles)
Das extra-Anlegen halte ich für überflüssig.

Ciao,
yankemen
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.08.2010, 12:13     Titel:
  Antworten mit Zitat      
daniatic hat Folgendes geschrieben:

Ja das mache ich gerade auch, aber alles manuell.
Ich erstelle mit uicontrol und packe dann den handle in eine structure und speichere am ende die structure mit setappdata ab.
Geht das auch automatisch? Da bei 30 Elemente die Tiparbeit etwas nervig wird.

du kannst auch GUIHANDLES verwenden, aber dazu muss jedem GUI-Objekt Tags vergeben, sonst findest du deine Handles in Struktur-Gestrüpp nicht mehr.

So oder so wirst wahrscheinlich 30 mal tippen müssen.

Wenn bei dir die Namensgebung konstant ist,
dann kannst du doch SUCHEN und ERSETZEN von "handle_" auf "handles." machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
daniatic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2010, 12:24     Titel:
  Antworten mit Zitat      
Danke; so ist das schon weniger arbeit:
Code:
% die wichtigen Sachen wie 'Tag' und 'Parent' etc. nicht zu vergessen. Immerhin erhält alles einen Standardwert, das nicht definiert wird.
handles.figure = figure(...);
handles.listbox = uicontrol('Style','listbox');
setappdata(0,'handles',handles)


Zitat:
Du musst am Ende jeder Callback-Funktion auch selbst das wichtige guidata(hObject, eventdata); einfügen.

Wieso? Ich dachte ich arbeite hier mit appdata und nicht mit guidata.
Ich habe nach jedem callback jetzt setappdata stehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.08.2010, 12:52     Titel:
  Antworten mit Zitat      
daniatic hat Folgendes geschrieben:


Zitat:
Du musst am Ende jeder Callback-Funktion auch selbst das wichtige guidata(hObject, eventdata); einfügen.

Wieso? Ich dachte ich arbeite hier mit appdata und nicht mit guidata.
Ich habe nach jedem callback jetzt setappdata stehen.


Genau bei dir muss SETAPPDATA stehen
Private Nachricht senden Benutzer-Profile anzeigen
 
daniatic
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2010, 13:07     Titel:
  Antworten mit Zitat      
Ok vielen Dank!
Alle Fragen sind beantwortet.
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 - 2025 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.