Verfasst am: 18.09.2012, 10:41
Titel: Variable aus Edittext lesen uns speichern!
Hallo GoMatlab Community
Ich sitze zur Zeit an einem bisher noch recht simplen GUI, dennoch versage ich schon am Anfang. Heute und gestern den ganzne Tag gegoogelt aber nicht so richtg eine Antwort gefunden.
Hier meine Frage:
Es gibt es Edittext Feld in dem man eine Zahl rainschreiben soll. Diese Zahl soll gespeichert werden und im späteren Verlauf des GUIs wieder benutzt werden.
verwendet. Jedoch speichert er die variable nicht in A ab.
Ich tippe mal, dass ich hier einen grundlegenden blutiger Anfänger Fehler gemacht habe. Weiterhin habe ich die "handles" Funktion auch nicht ganz verstanden....
D = dir('*.bmp');
S.NAM = {D(:).name}; % Store the name of all items returned in D.
S.fh = figure('units','pixels',...
'position',[450100400400],...
'menubar','none',...
'resize','off',...
'numbertitle','off',...
'name','Input loader');
function[] = pb_call(varargin) % Callback for pushbutton.
S = varargin{3};
L = get(S.ls(1),{'string';'val'}); % Get the editbox string BMP
%Get the Values of the Textboxes and store them!
A=get(S.ls(2),'string');
assignin('base','GLCM_Size',A);
try
L = L{1}{L{2}}; % Give it a name for the base workspace.
X = imread(L);
str = [L(1:end-4)];
assignin('base',str,X); % Create the variable in the base workspace. catch fprintf('\t\t%s\n','No file selected, or read error.') end
Der Code soll bmps finden, sie ebenfalls im Workspace speichern, was auch funktioniert, und ebenfalls später wieder verwenden.
Eine weitere Frage hab ich noch! Kann ein Callback auch meherer Aktionen auslösen, wie Speicher das Bild, nimm die Variable und mache dazu noch X oder benötigt jeder "Schritt" einen eigenen Callback der durch das knopfdrücken aktiviert wird.
Danke schonmal für Hilfe, Ratschläge und was sonst noch so kommt.
Grüße
GTX570
PS: Mögliche Antworten bitte so verfassen das ein 3-Jähriger (oder halt eben ich) sie versteht :-p
verwendet. Jedoch speichert er die variable nicht in A ab.
Nein, das erzeugt nicht die Variable "A", sondern die Variable "GLCM_Size" mit dem Wert von "A".
"handles" ist zunächst mal ein einfacher Struct. Man könnte ihn genauso auch "P" nennen. Dieser wird per GUIDATA im Figure-Objekt gespeichert und von dort wieder ausgelesen:
Es ist viel sicherer Daten innerhalb der Figure zu speichern. Die Methode per ASSIGNIN die Daten im "base"-Workspace zu speichern, ist fehleranfällig. Wenn man z.B. eine GUI zweimal öffnet, oder irgendein zwischenzeitlich aufgerufenes Script ein "clear" ausführt, ist die Verwirrung groß. Deshalb ist GUIDATA, oder SETAPPDATA, bzw. "set(FigHandle, 'UserData')" eine weit bessere Wahl.
Nochmal zur Variablen A. Die Fehlermeldung die ich bekomme bezieht sich stets auf die Zeile in der A ausgeführt wird. Ich verstehe nicht ganz wieso das irgendwie die Matrix Dimension beinflusst bzw. was die Dimension ist. Ich bekomme einfach nicht das, was ich in das Editfeld schreibe am Ende aus der Figure wieder raus.
Zu GUIDATA und SETAPPDATA: Das GUI soll am Ende aus verschiedenen Figures bestehen. Werden die GUI oder APP Daten gespeichert und an die nächste Figure übergeben. Ich bin total neu in Matlab und der Programmierwelt. Entschuldigt daher bitte meine fehlenden Grundkentnisse. Leider fehlt mir in meinem Umfeld eine Person die einem das mal richtig erklärt. Sich alleine damit befassen ist irgendwie echt nicht einfach und der "A-Ha!" Moment ist halt noch nicht eingetreten
Die scripte, die am Ende die Berechnungen machen sollen sind alle Fertig geschreiben und müssen nur nach diesem Schritt, der ja failt ausgeführt werden mit den Variablen die ich in die Editboxen setze. Durch die GUI soll das handling der verschiedenen Scripte vereinfacht werden.
Das durchstöbern Deines Codes hat ein Problem gezeigt:
Wenn Du "'callback',{@pb_call,S}" definierst, enthält "S" nur die Felder, die bereits definiert worden sind. "S.ls" enthält deshalb erst ein Element!
Die Dimensionen eines Arrays ist die Ausgabe des SIZE() Befehls. Hier war "S.ls" nur ein Skalar, so dass "S.ls(2)" auf ein nicht existierendes Element zugreift.
Mit dem Code, den ich bereits gepostet habe, tritt das Problem nicht auf: Speicher am Ende der Hauptfunktion die Variable "S" per GUIDATA:
Variablen zwischen verschiedenen GUIs hin- und herzuschieben ist nicht trivial, aber auch kein Hexenwerk. Die klarste Methode wäre es eine GUI als "Haupt-GUI" zu betrachten und alle Variablen dort zu speichern - falls das zur Struktur der GUIs passt. Den Handle der Haupt-GUI, also der erste Input von GUIDATA, müsste dann entweder an die Unter-GUIs beim Erstellen übergeben werden, oder die Haupt-GUI bekommt einen "Tag", der mit FINDOBJ() gefunden wird:
Vielen Dank für deine Hilfe Jan! So läufts perfekto!
Falls weitere Fragen auftreten werde ich sie hier im Thread posten. So kann ich jedenfalls erstmal weiter machen.
Grüße
GTX570
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.