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

daten zwischen 2 GUIs übergeben

 

Mr.Zed
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.12.15
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 12.12.2015, 21:21     Titel: daten zwischen 2 GUIs übergeben
  Antworten mit Zitat      
ich bekomme es echt nicht gebacken weil ich die beispiele hier im forum einfach nicht verstehe.

ich habe eine hauptGUI mit m-file. beim start dieser hauptGUI wird eine 2. (und später noch eine 3. GUI geöffnet).

in der ersten GUI stelle ich mit einem slider einen wert ein den ich an die 2. gui übergeben möchte. das ganze soll auch funktionieren wenn ich den wert später nochmal in der hauptGUI ändere. prinzipiell geht es auch nur darum diesen zahlenwert anzuzeigen

ich denke setappdate und getappdata wäre hier das richtige, habe damit auch schon rum probiert aber bekomme es einfach nicht zum laufen
_________________

hier war mal ein Bild...
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2015, 00:06     Titel: Re: daten zwischen 2 GUIs übergeben
  Antworten mit Zitat      
Hallo Mr.Zed,

Dann poste doch mal den Code, mit dem Du es probiert hast und erkläre, was nicht so läuft, wie Du es Dir vorstellst. Dann sind Verbesserungsvorschläge viel einfacher und passen zu Deinem existierenden Code.

Was bedeutet genau: "an die 2. GUI übergeben"? Wohin soll der Wert geschrieben werden?

Zitat:
das ganze soll auch funktionieren wenn ich den wert später nochmal in der hauptGUI ändere.

Das verstehe ich nicht.

Zitat:
prinzipiell geht es auch nur darum diesen zahlenwert anzuzeigen

Bitte erkläre das genau: Wie soll das "angezeigt" werden? Wieso meinst Du dass setappdata hier passend wäre? Du möchtest ja eigentlich keine Applicationdata setzen, sondern etwas "anzeigen".

Bisher ist die Frage noch recht allgemein und man muss für eine Antwort sehr weit ausholen. Kannst Du Dich auf ein konkretes Teil-Problem konzentrieren?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Zed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.12.15
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 13.12.2015, 15:58     Titel:
  Antworten mit Zitat      
ich möchte einfach eine variable vond er einen in die andere GUI bekommen. in der 1. gui wird diese variable berechnet(bzw durch deren m-file), in der 2. gui soll dieser wert in einer textbox angezeigt werden.

also in der ersten gui stand in der function wo der wert berechnet wird folgendes:
Code:


und in der 2. gui in der function wo ich die variable brauche:
Code:


danach hab ich hier im forum noch weiter recherchiert und es damit versucht:
Code:

  hMainGui = findobj('Tag','achsauslegung_neu_vorn_') ;      

   setappdata(hMainGui, 'schraegV' , cav);

   handlesMainGui = guidata(hMainGui);

   handlesMainGui.cav=cav;


und in der 2. gui:
Code:

hMainGui = findobj('Tag','achsauslegung_neu_vorn_');                        
cav = getappdata(hMainGui    , 'schraegV')   ;
set(handles.cAV_soll,'String',num2str(cav));


als fehler bekomme ich:
Code:
Error using getappdata
Value must be a handle.


ich wollte setappdata nutzen da ich ungefähr 12 werte von der einen in die andere gui übergeben muss
_________________

hier war mal ein Bild...
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2015, 22:51     Titel:
  Antworten mit Zitat      
Hallo Mr.Zed,

Zitat:
in der 1. gui wird diese variable berechnet(bzw durch deren m-file), in der 2. gui soll dieser wert in einer textbox angezeigt werden.

Dann benötigst Du kein setappdata . Du möchtest keine ApplicationData setzen, sondern den Inhalt einer Text-Box.

Bei der Erstellung des 2. GUIs kannst Du den Handle der benötigten Text-Box im handles-Struct speichern (falls das nicht sowieso getan wird - arbeitest Du mit GUIDE?). Dann:
Code:
% In der 1. GUI:
cav = rand; % Oder was auch immer

GUI2H = findobj(groot, 'flat', 'tag', 'TagOfYourGUI2');
if length(GUI2Handle) ~= 1
  warning('Cannot find 2nd GUI to set value');
  return;
end

GUI2handles = guidata(GUI2Handle);
set(GUIhandles.textbox1, 'String', sprintf('%f', cav));
 


Zitat:
Code:

das bleibt immer tückisch: gcf ändert sich, wenn der User auf ein GUI klickt. Das läuft also manchmal, je nach Aktivität der Nutzer aber auch nicht.

Zitat:
Code:
hMainGui = findobj('Tag','achsauslegung_neu_vorn_');                        
cav = getappdata(hMainGui    , 'schraegV')   ;


als fehler bekomme ich:
Code:
Error using getappdata
Value must be a handle.

Der Fehler bedeutet, dass der findobj Befehl keinen Handle zurückgeliefert hat. Vielleicht hat Dein GUI2 nicht den Tag 'achsauslegung_neu_vorn_' ?

Zitat:
ich wollte setappdata nutzen da ich ungefähr 12 werte von der einen in die andere gui übergeben muss

Das verstehe ich nicht. Was hat das mit der Anzahl der Werte zu tun?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Zed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.12.15
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 15.12.2015, 07:27     Titel:
  Antworten mit Zitat      
danke für deine hilfe, jetzt muss ich aber noch mal ganz dumm fragen wo ich den tag der GUI bestimme. ist es einfach der name der .fig oder ist es das tag dass ich unter den properties des hintergrundes der gui im GUIDE (den nutze ich) setze?
mit beiden varianten gibt mir dein code leider das warning aus Sad
_________________

hier war mal ein Bild...
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.12.2015, 08:39     Titel:
  Antworten mit Zitat      
Hallo Mr.Zed,

Der 'Tag' ist der Inhalt des Properties namens 'Tag'.

Zitat:
mit beiden varianten gibt mir dein code leider das warning aus :(

Bitte poste den Code und die Meldung. Ich kann mir zwar zusammen reimen, was Du meinst. Aber konkrete Informationen sind im Forum immer besser.

Wenn die Figure mit dem entsprechenden Tag nicht gefunden wird, enthält der von mir gepostete Code vielleicht einen Bug. Das Lesen der Docs zu findobj zeigt, dass der Flag 'flat' nur im Vektor der übergebenen Handles sucht. Also:
Code:
GUI2H = findobj(allchild(groot), 'flat', 'tag', 'TagOfYourGUI2');
% Oder:
GUI2H = findobj(groot, 'tag', 'TagOfYourGUI2');

Ersteres ist dabei besser, denn das zweite durchsucht alle erstellten Grafik-Objekte, also auch alle Line's, Legend's, Buttons, Menu's usw. Wenn man mehrere GUIs offen hat, kann das eine spürbare Verzögerung bewirken.
Zusätzlich hat allchild noch den Vorteil auch Figures zu finden, deren 'HandleVisibility' ausgeschaltet ist.

Es ist übrigens üblich, dass Vorschläge der Antwortenden Bugs enthalten, denn wir können Deinen Code ja nicht laufen lassen und auch nach 35 Jahren Programmiererfahrung funktioniert mein Hirn doch immer noch nicht so gut wie ein Original-Matlab-Interpreter. :-) Deshalb sind Mitdenken und Debuggen immer erforderlich.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Zed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.12.15
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 15.12.2015, 13:10     Titel:
  Antworten mit Zitat      
ich habe es jetzt doch mit der appdata gemacht, auch wenn die eigentlich vielleicht nicht dafür gemacht ist funktioniert es anscheinend ganz gut:

gui1:
Code:
setappdata(0,'variablenname',variable);


gui2:
Code:
variable=getappdata(0,'variablenname');


danke trotzdem
_________________

hier war mal ein Bild...
Private Nachricht senden Benutzer-Profile anzeigen
 
Mr.Zed
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.12.15
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 16.12.2015, 10:20     Titel:
  Antworten mit Zitat      
okay, kommando zurück Very Happy

ich habe es jetzt auf deinem weg gemacht, musste aber ne weile fummeln bis es funktioniert
Code:
       %Übergabe an 2. GUI
        GUI2Handle = findobj('tag', '~tagGUI2~');
        if length(GUI2Handle) ~= 1
         
          return;
        end

        GUI2handles = guidata(GUI2Handle);

        set(GUI2handles.~textbox~, 'String', num2str(~variable~,'%7.1f'));


Das warning habe ich rausgenommen weil ich das return regulär brauche da beide GUIs auch unabhängig voneinander funktionieren sollen

notwendig wurde der schritt zu deiner variante dadurch dass ich den wert in der 2. gui jedesmal aktualisieren wollte wenn er sich in der 1. gui ändert. mit meiner variante wäre das sehr aufwendig geworden.

also nochmal vielen dank für deine hilfe, jetzt läuft es genau so wie ich es mir vorgestellt habe Smile
_________________

hier war mal ein Bild...
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.