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

Funktion in einer GUI durch andere GUI aufrufen

 

vile
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2014, 09:33     Titel: Funktion in einer GUI durch andere GUI aufrufen
  Antworten mit Zitat      
Hallo zusammen,

nach langer und leider erfolgloser Suche im Netz frage ich hier nach, ob jemand direkt helfen kann oder weiß wo ich eine Antwort auf meine Frage finde:

Ich erstelle eine GUI mit einer Art Assistent/Wizard-Funktionalität. Dazu möchte ich mit callbacks (einfach buttons) Funktionen aufrufen, die in anderen GUIs enthalten sind.
Wie muss ich im Prinzip vorgehen?

Konkret: die Funktion 'function draw' in der 'MainGUI' soll durch einen Klick auf einen button der 'SubGUI' in der 'MainGUI' ausgeführt werden, sodass die Funktion 'function draw' in der 'MainGUI' etwas plottet.
Aber im besten Fall schaffe ich es dass in der SubGUI geplottet wird...

Also: Wie gehts oder wo steht wie es geht?

Vielen Dank im Voraus!
Vile
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 23.04.2014, 14:36     Titel:
  Antworten mit Zitat      
Hallo, wenn du die GUIs über GUIDE erstellt hast, dann
in der Button-Callback des SubGUI muss der Aufruf in der Art aussehen:
Code:

MainGUI('draw', hObject, [], handles);
Private Nachricht senden Benutzer-Profile anzeigen
 
vile
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2014, 20:38     Titel:
  Antworten mit Zitat      
Hallo, danke für deine Antwort.
Aber ich habe es auch mit deinem Tipp nicht geschafft.

In meiner mainGUI sieht die Funktion so aus:
Code:
function draw(hObject, handles)
x=0:.1:10;
y=x.^2;
plot (x,y)


Habe auch ohne (hObject, handles) probiert.

In der subGUI:
Code:

% --- Executes on button press in pushbutton_ok.
function pushbutton_ok_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_ok (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% close
mainGUI('draw', hObject, handles)


Hier auch mit verschiedenen Übergabewerten versucht.

Steht dort "close", dann funktioniert es wie es soll (mit Klick auf ok schließt das Fenster und in der mainGUI wird geplottet). Wird "close" aber auskommentiert, so wird in der subGUI geplottet, heißt also dass diese Lösung nur so halb funktioniert.

Was also tun wenn das Fenster der subGUI offen bleiben soll und im Hintergrund in der mainGUI geplottet werden soll?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.04.2014, 22:30     Titel:
  Antworten mit Zitat      
Hallo

da der Fokus an der SubGUI liegt, wird deswegen dorthin geplottet.
Also muss man beim Plot, das Handle deiner Axes übergeben

also in draw:
Code:

function draw(hObject, handles)
x=0:.1:10;
y=x.^2;
plot (hier_axes_handle, x,y)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
vile
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2014, 07:35     Titel:
  Antworten mit Zitat      
Danke für die Antwort, aber ich kriege es nicht hin Sad

Das Problem ist, dass ich von handles in der GUI keine Ahnung habe und auch bisher nichts passendes im Netz dazu gefunden habe, um mich einzuarbeiten.

Das Diagramm in der mainGUI heißt axes_main.
Wenn ich das probiere, lässt sich wieder nur die Funktio innerhalb der mainGUI aufrufen, aber nicht außerhalb:

Code:

function draw(hObject, handles)
x=0:.1:10;
y=x.^2;
plot (handles.axes_main,x,y)
 


Aufruf:
Code:

draw(hObject, handles)
 


Wofür wird hier eigentlich hObject gebraucht? Habe das aus einem Tutorial.

Am liebsten wäre mir ein Link, Tutorial, Beispielprojekt oder Video oder so um mich in die Thematik der handles einzulesen. Dann müsstet ihr mir nicht alles erklären Wink

Danke im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.04.2014, 14:19     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:
Wofür wird hier eigentlich hObject gebraucht?

hObject ist das handle des Graphischen Objekts, welches die Callback-Funktion ausgelöst hat. z.B. man kann eine Callback-Funktion für mehrere Objekte nutzen.z.b Radiobuttons, da möchte ja unterscheiden welcher Button hat die Funktion ausgelöst.

Auf jeden Fall musst du bei der ersten Aufruf von SubGui, Handle der MainGUI an SubGui übergeben, dazu SETAPPDATA/GETAPPDATA Methode aus Video 2 nutzen
Danach handles der MainGUI an draw-Funktion übergeben

das sind z.B. gute Videotutorials:
http://blogs.mathworks.com/pick/200.....nputs-to-guide-callbacks/

http://blogs.mathworks.com/videos/2...../03/guide-video-part-two/


Interessant ist auch die Funktion GCBF, die muss dann aber in der oberen Funktion in m-File implementiert werden
Private Nachricht senden Benutzer-Profile anzeigen
 
vile
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2014, 12:21     Titel:
  Antworten mit Zitat      
Zitat:
Auf jeden Fall musst du bei der ersten Aufruf von SubGui, Handle der MainGUI an SubGui übergeben

Was genau meinst du damit? In sub_OpeningFcn per setappdata bzw. getappdata oder dann erst wenns auch gebraucht wird?

Wahrscheinlich so etwas, funktioniert aber leider nicht:
main GUI:
Code:

function pushbutton1_mainGui_Callback(hObject, eventdata, handles)
setappdata(0, 'MainGuiHandles', handles)
sub

function draw(hObject, handles)
x=0:10;
y=2*x+1;
plot(handles.axes_main,x,y)
 


sub:
Code:

function pushbutton1_subGui_Callback(hObject, eventdata, handles)
MainGuiHandles=getappdata(0, 'MainGuiHandles');
draw(hObject, MainGuiHandles)
 


Es kommt die Meldung Undefined function 'draw' for input arguments of type 'struct'.

Vielleicht kann mir jemand den entscheidenden Tipp geben 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: 03.06.2014, 12:46     Titel:
  Antworten mit Zitat      
Hallo

du hast das fast richtig


in der SUB musste der Aufruf so lauten:
Code:

function pushbutton1_subGui_Callback(hObject, eventdata, handles)
MainGuiHandles=getappdata(0, 'MainGuiHandles');
% du willst ja die Funktion aus der MainGUI aufrufen:
mainGUI('draw', hObject, MainGuiHandles)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
vile
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2014, 12:52     Titel:
  Antworten mit Zitat      
Super, vielen vielen Dank!

Genau so sollte es auch sein!
Danke Smile
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.