|
joshua |
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 21.02.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.02.2014, 12:41
Titel: if "edit box not used"
|
|
Hallo,
in meiner GUI (die ein Koordinatensystem mit mehreren y-Achsen ausgibt) gibt es eine edit box, bei der man die Bezeichnung einer y-Achse angeben kann. Wenn diese edit box nun nicht benutzt wird (keine Eingabe erfolgt) möchte ich, dass auch die entsprechende Achse keinen Namen trägt.
Wenn ich einmal auf die editbox klicke und nichts eingebe, dann funktioniert das auch. Allerdings wenn ich erst gar nicht draufklicke, dann wird der Achse anscheinend zufällig mit einer Zahl benannt.
Wie kann man dafür sorgen, dass bei Nicht-Benutzung der edit box auch nichts erscheint?
Ich habs so probiert:
|
|
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 21.02.2014, 16:46
Titel:
|
|
Hallo
und das funktioniert? Sieht für mich nach Fehler:
diese Zeile passen einfach nicht zusammen:
was bedeutet denn das?
Auf jedenfall sollte man in der OpeningFcn alle Werte vorinitialisieren
|
|
|
joshua |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 21.02.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.02.2014, 21:37
Titel:
|
|
|
|
|
Mit der ersten Zeile möchte ich den String, der gerade im edit-Feld steht abspeichern in dem handle 'handles.edit_achs_K4'.
Mit dem if-Befehl möchte ich dann (falls eben nichts eingeben wurde [isempty]), dass nun auch im edit-Feld ein leerer String ist('').
Das war eben der Versuch, diese Zahl wegzukriegen, mit der er mir immer die Achse benannt hat, wenn ich nichts ins edit-Feld eingegeben habe und es auch nicht angeklickt habe.
"Auf jedenfall sollte man in der OpeningFcn alle Werte vorinitialisieren"
Das ist interessant. Denn ich habe sobald ich die GUI ausgeführt habe keine Variablen im Workspace. Wo muss ich denn Variablen im m-file einer GUI initialisieren, sodass sie später im workspace stehen?
Vllt ist das dann auch der Grund für die zufällige Zahl im edit-Feld, welches man noch initialisieren müsste...
Ich habe die Initialisierung in der callbackFcn des edit-Feldes ausprobiert (a='hello' einfach als Beispiel). Allerdings erhielt ich dann beim Aufrufen und verwenden des edit-Feldes keine Variable a im Workspace.
Ich hab die Initialisierung in der ersten Zeile des m-files probiert, da kam eine Fehlermeldung (Error: File: clutch_GUI.m Line: 3 Column: 1
Function definitions are not permitted in this context.)
Auch in der OpeningFcn habe ich a='hello'; eingefügt und es wurde nicht im Workspace angezeigt.
Wenn ich im Command Window Variablen definiere werden sie schon im Workspace angezeigt.
Das m-file der GUI besteht nur aus vielen aneinander gereihten Funktionen für die verschiedenen Elemente. Zwischen den Funktionen der Elemente gebe ich handles hin und her, falls ich Beispielsweise die Eingabe in einem edit-Feld für ein anderes brauche (handles.edit_xyz=get(hOject, 'String'; schreib ich dann immer).
Müssen diese handles dann auch außerhalb der jeweiligen Funktion initialisiert werden?
|
|
|
balli1187 |
Forum-Anfänger
|
|
Beiträge: 26
|
|
|
|
Anmeldedatum: 15.06.12
|
|
|
|
Wohnort: Magdeburg
|
|
|
|
Version: 2007b
|
|
|
|
|
|
Verfasst am: 26.02.2014, 09:51
Titel:
|
|
|
|
|
bei der ersten Zeile, weiß ich nicht, wo der String, den du mit get holst hingespeichert wird. Hast du mal einen Breakpoint gesetzt und geschaut?
wenn du den aktuellen 'String' deines Editfeldes sichern willst, nutze doch die UserData dafür. Das müsste (glaube ich) sogar in einer Zeile gehen und du brauchst kein zusätzliches handles-Feld....
ansonsten kannst du einfach ein Edit-Feld für die Eingabe der Achsenbezeichnung und ein Text-feld zum Anzeigen nutzen...
Wenn nichts im Edit-Feld steht, wird auch nichts angezeigt
Zitat: |
"Auf jedenfall sollte man in der OpeningFcn alle Werte vorinitialisieren"
Das ist interessant. Denn ich habe sobald ich die GUI ausgeführt habe keine Variablen im Workspace. Wo muss ich denn Variablen im m-file einer GUI initialisieren, sodass sie später im workspace stehen? |
"Vorinitialisieren" bedeutet, dass du deine eigenen handles (also die, die nicht durch ein platziertes Objekt erstellt werden) einmal in der OpeningFcn aufführst und ihnen Anfangswerte zuweist und zwar bevor dort der Befehl GUIDATA ausgeführt wird. Dadurch sollten die Änderungen, die du an der handles-Struktur vornimmst, übernommen werden. Sprich deine Felder werden innerhalb der Struktur angelegt.
Arbeitest du nicht mit Strukturen, sondern nutzt einfach Variablen wie in einem anderen m-File oder oder im Command-Window (a=1, b=2,....) sind diese nur innerhalb der gerade ausgeführten function nutzbar und werden beim verlassen wieder gelöscht!
Im Workspace werden dir grundsätzlich keine Variablen/Strukturen/Objekte deiner GUI angezeigt. Es sei denn du unterbrichst die Code-Abarbeitung mit einem Breakpoint.
Möchtest du Variablen an den Workspace übergeben, brauchst du den Befehl 'assignin'
Ist ganz schön verwirrend, wenn man vorher "nur" mit m-Files gearbeitet hat, weil man doch bisschen umdenken muss. bin selbst immer noch dabei das richtig zu durchsteigen, da ich auch noch nicht so lange mit GUI's arbeite
Aber mit ein bisschen Einarbeitung gehts dann doch...
|
|
|
joshua |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 21.02.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.02.2014, 20:17
Titel:
|
|
|
|
|
Ja, das mit dem Umdenken betrifft mich "zum Glück" nicht, da ich vorher noch gar nicht mit Matlab gearbeitet hab:D
Ok, das mit dem assignin-Befehl war schon recht hilfreich. Jetzt kann ich die eingelesene Matrix anzeigen lassen:)
Ja, das mit den Variablen innerhalb einer GUI austauschen ist auch so eine Geschichte:
Dafür könnte man ja einmal getappdata/setappdata verwenden oder eben, wie du sagst mit 'Userdata' oder mit Guidata ginge es anscheinend auch.
Welches sollte man da für meine Zwecke verwenden?
Ich hab einige Elemente in der GUI, mit denen ich auswähle zum Beispiel welche Farbe [über popupmenu] der Graf haben soll, ob er eine extra Achse haben soll [über checkbox],.....
Am Ende rufe ich dann über einen pushbutton ('Plotten') eine extra Funktion auf, wo ich dann die ganzen Informationen aus den GUI-Elementen verwerte und dementsprechend eine Grafik ausgeben lasse. Bisher hab ich immer mit handles den Zustand des GUI-Elementes gespeichert und später aufgerufen (also mit GUIdata).
Ich hab mich mal ein bisschen informiert.
Wenn ich das richtig verstanden habe, dann ist
guidata für diese Zwecke schon ganz gut.
Allerdings, wenn man häufiger Werte hin und her gibt, sollte man lieber appdata verwenden. Bei appdata kann man zwar mehr Variablen abspeichern, aber man muss immer einen Namen für die Variable mitabspeichern, da es ja mehrere gibt.
Daher gibt es noch die Möglichkeit über userdata Variablen zu übergeben, wo man keinen Namen braucht, dafür nur eine Variable übergeben kann.
Ich hab mir mal folgendes Beispiel mit allen drei Möglichkeiten überlegt. Ich seh da aber jetzt keine großen Unterschiede eigentlich.
Die Eingabe in einem editfeld (tag: edit1) in einem pushbutton als String (tag: push1) anzeigen lassen.
Zitat: |
% mit guidata
%edit1_Callback Funktion
handles.edit1 = get(hObject,'String');
set(handles.push1, 'String', handles.edit1);
guidata(hObject, handles);
% mit userdata (das hab ich fast so im Internet gefunden)
%edit1_Callback Funktion
mystring = get(hObject,'String');
set(hObject,'UserData',mystring);
%push1_Callback Funktion
string = get(edittexthandle,'UserData');
% mit appdata
%edit1_Callback Funktion
text=get(hObject, 'String');
setappdata(editfeld, 'Eingabe', text);
%push1_Callback Funktion
value=getappdata(editfeld, 'Eingabe');
set(hObject, 'String', value);
|
Beim userdata-Beispiel erscheint mir das handle 'edittexthandle' seltsam. Ich hätte da eigentlich das handle 'handles.edit1' erwartet.
Außerdem überrascht mich der Befehl string = get(edittexthandle,'UserData');
Ich hätte hier set(hObject, 'String', get(edittexthandle,'UserData')); erwartet.
[url]
http://www.mathworks.de/de/help/mat.....matic-gui.html#f13-998905
[/url]
Kann man anhand dieses Beispieles Vorteile/Nachteile der 3 Möglichkeiten aufzeigen?
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|