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

GUI ohne GUIDE erstellen, wie funkt. Callback?

 

Dragonshark
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 22.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2010, 15:01     Titel: GUI ohne GUIDE erstellen, wie funkt. Callback?
  Antworten mit Zitat      
Hallo Leute!
Da ich nun schon laenger ein Problem zum Verstaendnis zu GUI's in Matlab habe,stelle ich einfach die Fragen mal hier!

Ich bin derzeit am ueberpruefen eines Programmiertextes, der mit Gui arbeitet und kenne mich noch nicht allzu gut damit aus
function(a)=fun(in1)
figure(1)
a=in1
u=uicontrol('style','pushbutton','Callback','a=5')
uiwait;
end

Das ist einfach mal ein kurzes Beispiel, das ich programmieren wuerde,wobei ich aus dem workspace einfach die funktion fun aufrufe und
und ihr einen wert fuer in1 uebergebe. Gleichzeitig habe ich zufaelligerweise im workspace vorher noch eine variable a gespeichert.
Nun habe ich festgestellt,dass mein Callback nicht auf das a von der Funktion zugreift,die auch die Figure oeffnet sondern das a im Workspace aendert.

Ich verstehe derzeit nicht, wie dabei die Struktur matlabs funktioniert,dass die callbacks zwar nicht auf variablen der das object erstellenden funktion zugreifen aber dafuer auf a des workspaces zugreifen kann.

ich hab nun schon viel ueber das normale gui mit guide gelesen ueber guidata und handles ect. Kann mir jemand erklaeren,wie matlab bei den callbacks arbeitet,wie ich den callbacks eingabewerte geben kann und auch wieder ausgabewerte erhalte.

geht das auch in der Form wie oben,dass man es so schreibt:
u=uicontrol('style','pushbutton','Callback','a=5')
anstatt
u=uicontrol('style','pushbutton','Callback',@callp)

function callp(....)

und wenn nicht,was und wie wuerde ich callp werte uebergeben koennen ohne das gui mit guide zuerstellen,welche handles muessen uebergeben werden ect?

Fuer diese grundlegenden Antworten waere ich sehr dankbar,selbst wenn es ein bisschen doof klingt Smile
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: 05.07.2010, 13:27     Titel:
  Antworten mit Zitat      
Hallo DragonShark,

ich weiß zwar auch nicht, warum das a aus dem Workspace verwendet wird, weil ich ebenfalls wenig Ahnung von Matlab & Guis habe. Heisst das, dass Du ein anderes a(im Workspace) als das in1 hast, aber nachweislich das a aus dem Workspace verwendet wird?
Aber mal ein kurzes Beispiel, wie ich das schreiben würde.

Code:

function [a] = fun(in1)
     handles.main = figure('Tag', 'main');
     handles.a = in1;
     handles.pushbutton_1 = uicontrol(...
                   'Parent',handles.main,...
                   'Tag', 'pushbutton_1',...
                   'Style','pushbutton',...
                   'Callback', @pushbutton_1_Callback);

function pushbutton_1_Callback (hObject, eventdata)
     %Code, der was mit a macht, z.B.
      handles.a = handles.a * handles.a;
      %Rückgabe der Funktion könnte damit funktionieren
      a = handles.a;
      guidata(hObject, handles);
end
 


In der Hauptfunktion (Dateiname, Aufruf) wird ein Eltern-Objekt angelegt:
handles.main, das ist eine figure mit allen Standardwerten, nur das Tag(DIE Identifizierung) wird manuell auf "main" geändert. Eine Gleichheit zwischen Handle.Name und Handle-Tag ist anzustreben.

Weiterhin wird der Pushbutton angelegt. Dieser wird genauer referenziert:
Zu welchem Überhandle gehört er('parent')?
Wie wird er identifiziert('Tag')?
Typ('Style')?
Und welche Funktion soll aufgerufen werden, wenn man draufklickt('Callback')?

Der Aufruf mit @pushbutton_1_Callback geht nur, weil die Funktion in der gleichen Datei enthalten ist. Wäre sie in einer anderen Datei, müsste m.E. das @ weggelassen werden. Kann aber sein, dass man dann auch etwas übergeben muss.
Der Name ..._Callback dient zur Orientierung im Code. Du hättest sie auch function Heinz_Meier(...,...) nennen können.

handles ist eine Struktur. Damit auch Unterfunktionen drauf zugreifen können, erfolgt das Speichern in dieser Struktur mit handles.<variablenname>. Und mindestens für den Zugriff nachdem eine Unterfunktion etwas geändert hat: anschließend mit guidata(hObject, handles).
Somit wird alles in der Struktur handles gespeichert, auf die Du dann an anderer Stelle wieder Zugriff hast.
Du musst also nichts extra übergeben, guidata speichert einfach alles, und Du bekommst alles, in dem Du den benötigten Teil der Struktur handles ausliest.

Ein Aufruf der Form
Code:

u=uicontrol('style','pushbutton','Callback','a=5')
 

sollte m.E. nach schief gehen. Probiers halt aus. Aber Matlab erwartet eine aufrufbare Funktion.

Code:

handles.pushbutton_1 = uicontrol(...
                                  'Parent',handles.main,...
                                  'Tag','pushbutton_1,...
                                  'Style','pushbutton,...
                                  'Callback','fun('handles.a')' );
 

sollte die Hauptfunktion mit dem Parameter handles.a aufrufen. (Habe ich einem Beispiel entnommen).
Soweit meine Kenntnisse. Habe es jetzt nicht getestet, aber das musst Du ja eh, wenn Du daran weiterbaust.
Private Nachricht senden Benutzer-Profile anzeigen
 
Wolfgang
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 10.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 14:20     Titel:
  Antworten mit Zitat      
Hallo zusammen,

callback Funktion greifen auf Grund ihrer Definition bei nicht-numerischem Input auf den Base-Workspace zu. 'a=5' ist ein Character, daher dieses Verhalten. Das ist so gewollt.

Wolfgang
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.