Ich verstehe die Frage noch nicht. Wieso sollte nach der Ausführung dieses Codes Val denn einen anderen Wert haben? Was ist die Variable "b"?
An welcher Stelle testest Du denn den ausgewählten Index?
Ich komm noch nicht mit Callbacks klar und hatte diesen Code hier im Forum gefunden. Deswegen hatte ich es erst mal damit versucht.
Im Grunde möchte ich ein Popupmenü, in dem ich 2 Dinge zur Auswahl habe (Eingabe1 und Eingabe2).
Diese möchte ich dann natürlich auslesen.
Wenn Eingabe 1 genommen wurde, bekommt Val den Wert 1 und wenn Eingabe 2 gewählt wurde, wird Val zu 2. Das kann ich dann in eine If- Bedingung schmeissen und damit weiterarbeiten.
Nur funktioniert es nicht, die im Popupmenü gewählten Optionen weiter zu verwenden. Val hat dann immer den Wert 1.
Irgendwo liegt hier noch ein grundlegendes Missverständnis vor.
Was bedeutet "Ich komm noch nicht mit Callbacks klar"?
Ohne die Benutzung von Callbacks wird eine Aktion in einem UICONTROL-Objekt, z.B. das Auswählen eines Eintrages im Popup-Menü, keine Auswirkungen haben. "Val" wird sich also nicht auf magische Weise ferngesteuert ändern.
Zur Zeit funktioniert also alles genau wie im Programm angegeben.
Erstelle eine Callback-Funktion, so dass das Popup-Menü auch irgendetwas bewirken kann.
Beispiele findest Du dazu genügend im Netz und in der Dokumentation von Matlab.
Da kommt nur leider die Fehlermeldung:
??? Error: File: Kopplung_umgekehrt.m Line: 102 Column: 1
Function definitions are not permitted in this context.
Dann hatte ich im Internet dem obigen Code gefunden und es damit versucht. Jedoch zeigt Matlab mir da immer den Wert 1 für Val an.
Die Fehlermeldung "Function definitions are not permitted in this context" bedeutet, dass man in einem Script keine Funktion definieren kann. Speichere die Funktion (also das Unterprogramm, welches mit "function" beginnt) in einem eigenen M-File oder wandele das Script in eine Funktion um (dafür also "function" in die erste Zeile einfügen und Inputs/Outputs geeignet ergänzen).
Zitat:
Jedoch zeigt Matlab mir da immer den Wert 1 für Val an.
Das sagt mir immer noch nichts. Wann zeigt Matlab dies an? Du hast bisher noch keinerleit Code gezeigt, der den Wert von Val ändern könnte. Dann bleibt der Wert natürlich beim Anfangswert.
An welcher Stelle erwartest Du aus welchem Grund, dass sich der Wert von Val ändert?
Deshalb dachte ich, das funktioniert bei nem Popupmenu auf die selbe Art und Weise.Dabei hätte Eingabe1 den Wert 1 und Eingabe2 den Wert 2.
Jedoch hat Val immer den Wert 1...egal ob ich Eingabe1 oder Eingabe2 markiert habe.
Natürlich liest GET den aktuellen Wert aus. Aber der Code, den Du hier gepostet hast, liest "Val" aus, direkt nachdem Du das Popup-Menü erstellt hast. Eine Auswahl triffst Du dann aber erst später. Wenn du danach wieder "Val = get(menu, 'Value')" ausführen würdest, z.B. im Callback des UICONTROLs, würdest du auch einen anderen Wert bekommen. Aber bisher hast Du keinen Code gezeigt, der später tatsächlich die Eigenschaft "Value" neu auslesen würde.
Danke für die Antwort und frohes neues Jahr erst einmal.
Also ich habs jetzt mal in ein separates m-file kopiert, ums besser zu verstehen.
Dein Code müsste ja dort auch klappen. Ich hätte nur eine kleine Verständnisfrage:
was bei deinem Code das uicontrol macht, ist klar.
Dann rufst du die function auf, die den Namen Callback hat. Mit den Inputs ObjectH und EventData, oder!? Aber wo kommen die jetzt her?
Ich versteh nicht ganz, wie das mit den functions und Callbacks funktioniert.
Zitat:
der wandele das Script in eine Funktion um (dafür also "function" in die erste Zeile einfügen und Inputs/Outputs geeignet ergänzen).
Ein Callback ist eine Funktion, die ausgeführt wird, wenn ein UICONTROL aktiviert wird. Bei einem Button also beim Klicken, bei einer Listbox oder einem Menü, wenn man ein Element daraus aktiviert. Dann wird die Funktion aufgerufen mit mindestens zwei Argumenten: Zuerst der Handle des aufrufenden Objektes, und zweitens den EventData, die Informationen über die Art des Events enthalten.
Callbacks werden in der Dokumentations umfassend erklärt. Hast Du dies schon mal gelesen?
Jedoch würde ich die andere Sache gerne mit dem Callback gerne verstehen und Anwenden können.
In der Dokumentation fehlt bei den Beispielen jeweils auch die von dir angesprochene Umwandlung des Skripts in eine function, weshalb da auch immer der selbe Fehler angezeigt wird ("function definition...").
Dannwird doch als output Str und Val definiert und als Input Eingabe1 und Eingabe2. Dann das Uicontrol erzeugt und dann die function "myCallback" aufgerufen, welche ObjectH als die Eingabe des PopUps definiert, versteh ich das richtig?
Das Umwandeln eines Scripts in eine Funktion ist einfach: Füge die Zeile "function [Output1, Output2, ...] = FunctionName(Input1, Input2, ...)" als erste in das Script ein, wobei die Input- und Output-Listen entsprechend angepasst werden müssen.
Hier gibt es zunächst zwei Funktionen mit dem gleichen Namen "myCallback". Ich vermute, die Hauptfunktion soll "myGUI" oder ähnlich benannt werden.
Die Hauptfunktion (also die erste) läuft durch, erzeugt aber nirgendwo die Outputs "Str" und "Val". Falls man diese als Outputs verwendet, bekommt man eine Fehlermeldung.
Der Callback "myCallback" wird dann aufgerufen, wenn man das Popup-Menü betätigt, nicht aber, während das Hauptprogramm durchläuft. Ein Callback ist also die Funktion, die darauf reagiert, dass ein GUIObjekt aktiviert wurde.
In dem obigen Beispiel erscheinen die Werte für Str und Val im Commandwindow, wenn das Popup betätigt wird.
Gruß, Jan
Einstellungen und Berechtigungen
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
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.