Verfasst am: 28.04.2015, 14:58
Titel: Archivierung von Werten aus mehreren Edit-Boxen
Hallo zusammen,
Habe mich nun auch zum Thema GUI eingelesen und arbeite schon an meinem ersten Projekt. Dabei geht es um das Einlesen von magnetischen Messungen mit anschließender Verarbeitung. Das klappt soweit ganz gut.
Zur Verarbeitung werden neben den magnetischen Messungen noch verschiedene Materialkonstanten per Edit-Box abgefragt (siehe GUI_Materialarchiv.jpg)
Mein Ziel ist nun, dass die Werte aus den Edit-Boxen intern gespeichert werden können, sodass ich über ein Popup-Menü nur noch den Materialname auswählen muss.
Nach klicken des Pushbuttons "Speichern" soll demnach im Popup-Menü die Auswahlmöglichkeit "NO35" hinzugefügt werden. Daran scheitert es leider bereits.
Mein Versuch sieht so aus:
Code:
function Tool_Bertotti_OpeningFcn(hObject, eventdata, handles, varargin)
handles.i = 0;
function pop_Archiv_Callback(hObject, eventdata, handles)
function edit_Materialname_Callback(hObject, eventdata, handles)
function edit_Leitfaehigkeit_Callback(hObject, eventdata, handles)
function edit_Massedichte_Callback(hObject, eventdata, handles)
function edit_Blechdicke_Callback(hObject, eventdata, handles)
function push_Speichern_Callback(hObject, eventdata, handles)
N = get(handles.edit_Materialname,'String');
L = get(handles.edit_Leitfaehigkeit,'String');
M = get(handles.edit_Massedichte,'String');
D = get(handles.edit_Blechdicke,'String');
i = handles.i;
i = i+1;
handles.Archiv(i,:) = [N L M D]; % speichern der Werte für späteren Zugriff
In der zweitletzten Zeile kommt ein Index-Fehler (war mir schon fast klar), aber ich weiß leider nicht wie ich auf ansonsten auf die einzelnen Auswahlmöglichkeiten des Popup-Menüs zugreifen soll.
Hoffe jemand versteht was ich eigentlich will und kann mir helfen
Verfasst am: 28.04.2015, 22:00
Titel: Re: Archivierung von Werten aus mehreren Edit-Boxen
Hallo Sporisha,
Zitat:
In der zweitletzten Zeile kommt ein Index-Fehler
Bitte poste die vollständige Fehlermeldung. Sie enthält wertvolle Details und es wäre nicht sinnvoll diese zu erraten, wenn Du sie schon vorliegen hast. Danke!
Code:
Str = get(handles.pop_Archiv, 'String');
Str{end+1} = N; % Was ist N? set(handles.pop_Archiv, 'String', Str);
Also deine Methode leuchtet mir ein.. aber leider funktionierts nicht. "N" soll der String aus der Editbox für den Materialname sein. Wenn ich auf den Speichern-Button klicke passiert gar nichts, auch keine Fehlermeldung.
Code:
% Pushbutton Speichern function push_Speichern_Callback(hObject, eventdata, handles)
Mein allgemeines Problem bei der GUI-Programmierung ist, dass ich den Code nicht mittels Workspace+CommandWindow testen kann... so löse ich die meisten meiner Fehler...
edit: Habe den oben zitierten Fehler gelöst... Ein cell-Array ist es erst sobald es mindestens 2 Auswahlmöglichkeiten im popup gibt. Damit kanns nun erstmal weitergehn...
Zuletzt bearbeitet von Sporisha am 30.04.2015, 11:39, insgesamt einmal bearbeitet
% die 4 Edit-Boxen function edit_Materialname_Callback(hObject, eventdata, handles) function edit_Leitfaehigkeit_Callback(hObject, eventdata, handles) function edit_Massedichte_Callback(hObject, eventdata, handles) function edit_Blechdicke_Callback(hObject, eventdata, handles)
function pop_Archiv_Callback(hObject, eventdata, handles) % Befüllen der Edit-Boxen anhand der archivierten Daten
i = get(handles.pop_Archiv,'Value');
set(handles.edit_Materialname,'String',handles.Archiv_Daten{i}(1));
set(handles.edit_Leitfaehigkeit,'String',handles.Archiv_Daten{i}(2));
set(handles.edit_Massedichte,'String',handles.Archiv_Daten{i}(3));
set(handles.edit_Blechdicke,'String',handles.Archiv_Daten{i}(4));
guidata(hObject, handles);
function push_Speichern_Callback(hObject, eventdata, handles) % Neue Auswahlmöglichkeit für neues Material
Name = get(handles.edit_Materialname,'String');
Str = get(handles.pop_Archiv,'String');
Str{end+1} = Name{1};
set(handles.pop_Archiv,'String',Str);
% Archivierung der Daten vom neuen Material
handles.Archiv_Daten{end+1} = {char(get(handles.edit_Materialname,'String'))char(get(handles.edit_Leitfaehigkeit,'String'))char(get(handles.edit_Massedichte,'String'))char(get(handles.edit_Blechdicke,'String'))};
guidata(hObject, handles);
Werde jetzt anschließend eine Möglichkeit zum Löschen eines Materials einbauen... habe allerdings noch eine grundlegende Frage:
Es funktioniert nun, dass ich innerhalb des GUIs neue Materialien hinzufügen kann... nach dem Schließen und neuem Ausführen sind die neuen Materialien allerdings wieder weg.
Wie bekomm ich es hin, dass alle handles beim Schließen des GUIs gespeichert werden und beim Öffnen wieder da sind?
Hab versucht so einen Save-Button beim Toolbar-Editor einzufügen, dieser speichert so wie ich das sehe aber nur das figure an sich...
meine Empfehlung wäre, beim Speichern alle relevanten Informationen zu extrahieren und in einer .mat-Datei zu speichern, und beim Laden das ganze entsprechend umgekehrt.
Nochmal danke Harald!
Habe mithilfe deiner Empfehlung nun auch das Archiv zum Laufen gebracht
Code:
function Tool_Bertotti_OpeningFcn(hObject, eventdata, handles, varargin) load('Archiv_Daten.mat','x') for i=1:numel(x); handles.Archiv_Daten{i} = x{i}; end
Str = get(handles.pop_Archiv,'String');
for i=1:numel(x); Str(i) = handles.Archiv_Daten{1,i}(1); end set(handles.pop_Archiv,'String',Str)
function pop_Archiv_Callback(hObject, eventdata, handles)
i = get(handles.pop_Archiv,'Value');
set(handles.edit_Materialname,'String',handles.Archiv_Daten{i}(1));
set(handles.edit_Leitfaehigkeit,'String',handles.Archiv_Daten{i}(2));
set(handles.edit_Massedichte,'String',handles.Archiv_Daten{i}(3));
set(handles.edit_Blechdicke,'String',handles.Archiv_Daten{i}(4));
function push_Speichern_Callback(hObject, eventdata, handles)
Name = get(handles.edit_Materialname,'String');
Str = get(handles.pop_Archiv,'String');
Str{end+1} = Name{1};
set(handles.pop_Archiv,'String',Str);
handles.Archiv_Daten{end+1} = {char(get(handles.edit_Materialname,'String'))char(get(handles.edit_Leitfaehigkeit,'String'))char(get(handles.edit_Massedichte,'String'))char(get(handles.edit_Blechdicke,'String'))};
x = handles.Archiv_Daten;
save('Archiv_Daten.mat','x');
Und wieder ist ein Projekt abgeschlossen und ich hab wahnsinnig viel gelernt! Danke dafür!
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.