function PhaseUnit_Callback(varargin) ifstrcmp(get(handles.Deg,'Checked'),'on') set(handles.Deg,'Checked','off') set(handles.Rad,'Checked','on')
handles.Data.PhaseUnit = 1;
else set(handles.Deg,'Checked','on') set(handles.Rad,'Checked','off')
handles.Data.PhaseUnit = 2;
end end end
Hat die Option nur 2 Auswahlmöglichkeiten wie bei Phase, kann ich für beide eine Callback verwenden. Bei 3 Auswahlmöglichkeiten müsste ich wissen welche Einheit angeklickt wurde bzw. müsste für jede Einheit eine eigene Callback Funktion haben.
Gibt es evtl. eine andere Umsetzung ohne 3 callbacks erzeugen zu müssen? Eine Eigenschaft wie z.B. "Value" gibt es bei uimenu nicht.
hat niemand eine Idee oder ist mein Anliegen nicht verständlich?
Ich finde es doch etwas unsinnig für jede Einheit eine eigene Callback zu schreiben. Da "Optionen" nur ein Menu Punkt der GUI ist und noch weitere installiert werden sollen, würde das den Code ziemlich aufblähen. In der Callback muss ja nur die gewählte Einheit wie Hz gespeichert werden und die anderen beiden Auswahlmöglichkeit unckecked werden.
macht dein Ansatz denn bei zwei Elementen das gewünschte?
Wenn der Nutzer nämlich dasselbe Element nochmal anklickt, ändert sich die Einstellung trotzdem.
Wenn du die Funktion so schreibst, hat sie das Verhalten, das ich erwarten würde:
Code:
function PhaseUnit_Callback(hObject, ~) ifstrcmp(get(hObject,'Label'), '[rad]') set(handles.Deg,'Checked','off') set(handles.Rad,'Checked','on')
handles.Data.PhaseUnit = 1;
else set(handles.Deg,'Checked','on') set(handles.Rad,'Checked','off')
handles.Data.PhaseUnit = 2;
end end
gerne doch, gerade auch weil du sonst eher ein "Fragenbeantworter" bist.
Ohne die genaue Anwendung zu kennen ein Gedanke noch dazu: wäre es vielleicht einfacher, mit Popupmenüs oder Radiobuttons zu arbeiten? Wenn der Platz ausgeht, könnte ich mir es auch als sinnvoll vorstellen, die Einstellungen in eine separate GUI auszulagern.
Bisher sieht man auf dem Bild nur das Menu Optionen, wobei es hier eben um die phys. Einheiten von x und y Werten geht. Die SignalViewer GUI dient zur Darstellung von Signalen im Zeit- und Frequenzbereich und ist an Matlab's
sptool
angelehnt, ohne jedoch Toolboxen zu benötigen. Nachdem ich hier immer wieder die gleichen Fragen zur Darstellung von Signalen im Frequenzbereich beantworte, dachte ich mir, es wird mal Zeit einen Anzeiger dafür zu erstellen. Angefangen habe ich vor über einem halben Jahr, wobei mir zwischendrin auch einfach die Zeit fehlte. Momentan kann ich mal wieder etwas mehr machen und hoffe bald mal eine erste Version hier zu veröffentlichen. Allerdings habe ich beim Programmieren immer wieder neue Ideen was noch fehlen könnte, so dass ich irgendwie nicht fertig werde
Lange Rede, kurzer Sinn...ich denke, diese Einstellungen in ein uimenu zu packen, ist sinnvoll. Es sind ja keine Settings die man ständig ändert und sie werden auch beim Verlassen der gui gespeichert.
Was mich etwas nervt ist die Tatsache, dass der Code der Maingui über die Hälfte nur mit dem Erstellen von Objekten der GUI zu tun hat. Das macht es halt etwas unübersichtlich und standiges Scrollen nötig. Am liebsten würde ich das Menu und die Toolbar in eine eigene Funktion packen. Aber dann müsste ich deren Callbacks ja auch jeweils einzeln in einen seperate Funktion auslagern, was ich fürs Debuggen etwas nervig finde.
eine Erwägung wäre, zumindest das Layout der GUI mit GUIDE zu erstellen, und im Code mit
openfig
die Figure zu öffnen, mit
guihandles
die Handles-Struktur erstellen zu lassen, und dann nur die Callbacks passend zu setzen.
Langfristig wird GUIDE ja durch den App Designer ersetzt werden, hier als Tech Preview:
http://www.mathworks.com/matlabcent.....change/48142-app-designer
Allerdings funktioniert dieser Tech Preview ausschließlich mit R2014b, und es gibt beispielsweise auch noch keinen Ersatz für uimenus.
Grüße,
Harald
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.