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

handle einer anderen gui ansteuern

 

gkaraden

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2012, 13:47     Titel: handle einer anderen gui ansteuern
  Antworten mit Zitat      
Hallo Leute,

habe wieder einmal ein Problem, hoffe ihr könnt mir helfen.

Ich möchte handles einer anderen gui ansteuern, brauche also ein Befehl wie das klassische

Code:

set(handels.edit1,'String',VariableX)
 


für das Ausfüllen aus einer fremden gui, weil die Daten eingeselen werden und damit der User diese nicht händisch einzutippen braucht.

Danach würde das File und die entsprechende Function ansteuern, um eine folgende Operation durchlaufen zu lassen.

Müsste doch möglich sein !?

Grüße und Danke im voraus

gkaraden


Harald
Forum-Meister

Forum-Meister


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

sollen die GUIs gleichberechtigt sein, oder soll eine GUI quasi die Haupt-GUI sein und dann daraus (evtl. nur temporär) eine andere GUI geöffnet werden?

Anders gefragt: wie ist das ganze bei dir grob aufgesetzt?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2012, 09:05     Titel:
  Antworten mit Zitat      
Hallo Harald,

also eigentlich sollen die gui's gleichberechtigt sein, da sie auch teilweise unabhängig voneinander Funktionen erfüllen bis auf den Fall das man über die erste auch die Objekte der zweiten ansteuern (befüllen) können sollte und danach wieder die zweite ihren vordefinierten Ablauf durchlaufen kann.

Hoffe ich konnte es etwas präzisieren.

Danke im voraus.

Gruß

gkaraden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.10.2012, 09:41     Titel:
  Antworten mit Zitat      
Hallo,

dann würde ich über getappdata/setappdata die Handles auf die GUIs untereinander austauschen, so dass du mit guidata an die Handles-Struktur kommst.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2012, 09:58     Titel:
  Antworten mit Zitat      
Hi Harald,

also ich komme jetzt über den Befehl

Code:

CallbackName('pushbutton1_Callback', object, eventdata, handles)
 


auf meine gui und entsprechende CallbackFunction, wo die Programmierung auch weiterläuft.

Jedoch soll es dort die errechneten Werte in ein Edit-Textfeld (handles.undamp_freq_fr) ausgeben. Hier bekomme ich die Fehlermeldung:

Code:

??? Reference to non-existent field 'undamp_freq_fr'.
 


Hast du eine Idee warum ??

Kann es sein das es dieses Edit-Textfeld (handles.undamp_freq_fr) immernoch in der ersten (Programmstart) gui sucht, obwohl es sich in der zweiten (über Programmstart weitergeleitet) befindet ?

Danke

Gruß

gkaraden
 
gkaraden

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2012, 10:02     Titel:
  Antworten mit Zitat      
Hi,

der Befehl lautet korrekt natürlich:

Code:

guiName('pushbutton1_Callback', object, eventdata, handles)
 


Sorry... Rolling Eyes


Gruß

gkaraden
 
Harald
Forum-Meister

Forum-Meister


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

was hier passiert, kannst du auch selbst mit dem Debugger überprüfen.

Bitte mehr Code, am besten ein kleines (vom Problem an sich abgesehen) lauffähiges Beispiel posten. In der Form ist es sehr schwierig, weiterzuhelfen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2012, 14:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

also ich generiere mir in meiner gui susp_visualisation Variablen:

Code:

handles.TireStiffnessFront = max(TireStiffnessFront);
handles.TireStiffnessRear = max(TireStiffnessRear);
handles.TireDampingFront = max(TireDampingFront);
handles.TireDampingRear = max(TireDampingRear);
handles.TireMassFront = max(TireMassFront);
handles.TireMassRear = max(TireMassRear);  
 


Nun will ich mit diesen in eine Operation in die Callback calc_freq_Callback der nächsten gui tire_property schicken.

Das mache ich mit dem Befehl:
Code:

tire_property('calc_freq_Callback',hObject, eventdata, handles)
 


Das funktioniert auch ganz gut und ich switche von Callback to_model_Callback aus gui susp_visualisation in Callback calc_freq_Callback der gui tire_property.

Jedoch möchte ich aber nach meiner Berechnung nun auch auf die handles der neuen Callback calc_freq_Callback zugreifen, was er mir auch anzeigt.

also möchte ich mit:

Code:

set(handles.undamp_freq_fr,'String',num2str(UndampedFrequencyFront))
set(handles.undamp_freq_re,'String',num2str(UndampedFrequencyRear))
set(handles.damp_freq_fr,'String',num2str(DampedFrequencyFront))
set(handles.damp_freq_re,'String',num2str(DampedFrequencyRear))
set(handles.text55,'String',num2str(DampingRatioFront))
set(handles.text57,'String',num2str(DampingRatioRear)
 


Nur die handles innerhalb der neuen Callback haben sich nicht verändern (noch von to_model_Callback), weswegen

handles.undamp_freq_fr
handles.undamp_freq_re
handles.damp_freq_fr
handles.damp_freq_re
handles.text55
handles.text57

nicht in Sichtweite von MATLAB sind.

Fehler:
Code:

??? Reference to non-existent field 'undamp_freq_fr'.
 


Es geht also "lediglich" um das Sichtbarmachen und Ausgeben der ObjectHandles innerhalb ihrer richtigen CallbackFunktion

Danke

Gruß

Gökhan
 
Harald
Forum-Meister

Forum-Meister


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

Wie in meinem ursprünglichen Beitrag gesagt: du musst dir die Handles-Struktur der anderen GUI mit dem Befehl guidata holen. Das scheint mir hier noch zu fehlen. Ich sehe auch nicht die nötigen setappdata/getappdata-Befehle.

Bitte zusammenhängenden Code posten. Den verbalen Erklärungen zu folgen ist viel mühsamer als sich den Code anzusehen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2012, 15:57     Titel:
  Antworten mit Zitat      
Hallo Harald,

also vorab mit getappdata/ setappdata bin ich nicht vertraut und bin mir auch bezgl. des fehlerfreien Nutzens nicht sicher, hier der Code:
Code:

function to_model_Callback(hObject, eventdata, handles)
% hObject    handle to to_model (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

TireFrontSpringForce = evalin('base','TireFrontSpringForce');
TireFrontSpringTravel = evalin('base','TireFrontSpringTravel');
TireStiffnessFront = TireFrontSpringForce ./ TireFrontSpringTravel;
handles.TireStiffnessFront = max(TireStiffnessFront);

TireMassFront = 50;
handles.TireStiffnessFront = TireMassFront;

guidata(handles.undamp_freq_fr,'String',handles.TireStiffnessFront)
guidata(handles.undamp_freq_fr,'String',handles.TireMassFront)
getappdata(tire_property('calc_freq_callback'))
 


Nun bekomme ich die Fehlermeldung:

Code:
??? Reference to non-existent field 'undamp_freq_fr'.

Error in ==> susp_visualisation>to_model_Callback at 684
guidata(handles.undamp_freq_fr,'String',handles.TireStiffnessFront)

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> susp_visualisation at 42
    gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback
 


Eigentlich soll es nun in der nächsten gui weitergehen:

Code:

function calc_freq_Callback(hObject, eventdata, handles)
% hObject    handle to calc_freq (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
setappdata(tire_property('calc_freq_callback'),TireStiffnessFront,TireStiffness
Front)
setappdata(tire_property('calc_freq_callback'),TireMassFront,TireMassFront)
UndampedFrequencyFront = (sqrt(handles.TireStiffnessFront/handles.TireMassFront)/(2*pi));
UndampedFrequencyFront = sprintf('%1.3f',UndampedFrequencyFront);
set(handles.undamp_freq_fr,'String',num2str(UndampedFrequencyFront))
 


Sorry vorab für eine grobe Fehlanwendung.

Hast du einen Vorschlag für mich ?

Vielen Dank.

Gruß

gkaraden
 
Harald
Forum-Meister

Forum-Meister


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

mehrere Baustellen:
- evalin ist nicht empfohlen. Die Daten sollten in der GUI abgelegt werden.
- guidata ist nicht für diese Form von Aufrufen gedacht. Bitte die Dokumentation und die Beispiele dazu lesen. Ich sehe nur zwei sinnvolle Verwendungsweisen:
1. "Globales" Aktualisieren der Handles-Struktur:
Code:
guidata(hObject, handles)

2. Abfragen der Handles-Struktur, wenn sie nicht ohnehin verfügbar ist (z.B. in einer anderen GUI)
Code:
andere_handles = guidata(andere_gui);

- getappdata sollte mit einem Rückgabeargument aufgerufen werden.
- Bei setappdata muss als erstes ein Handle übergeben werden. Ist
tire_property('calc_freq_callback') wirklich ein Handle??

Vor allem ist mir aber nicht klar, was du mit diesem Code (leider nach wie vor nur Bruchstücke) wirklich machen willst.

Vielleicht ist es einfacher, wenn du dich da selbst mal richtig einarbeitest. Hier sollte ein guter Startpunkt dafür sein:
http://www.mathworks.de/help/releas.....ating_guis/f5-998197.html
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 - 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.