WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Archivierung von Werten aus mehreren Edit-Boxen

 

Sporisha
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2015, 14:58     Titel: Archivierung von Werten aus mehreren Edit-Boxen
  Antworten mit Zitat      
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

set(get(handles.pop_Archiv(i),'String'),'String', N);
guidata(hObject, handles);


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. Sad


Hoffe jemand versteht was ich eigentlich will und kann mir helfen Smile

Grüße, Andy

GUI_Materialarchiv.JPG
 Beschreibung:

Download
 Dateiname:  GUI_Materialarchiv.JPG
 Dateigröße:  17.48 KB
 Heruntergeladen:  318 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.04.2015, 22:00     Titel: Re: Archivierung von Werten aus mehreren Edit-Boxen
  Antworten mit Zitat      
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);

Die Idee: String von Popup-Menü auslesen, neuen String anhängen, String wieder ins Popup schreiben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sporisha
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2015, 09:26     Titel:
  Antworten mit Zitat      
Danke für die Antwort Jan.

Hier die komplette Fehlermeldung zum Index-Fehler:

Code:
Index exceeds matrix dimensions.

Error in Tool_Bertotti>push_Speichern_Callback (line 118)
set(get(handles.pop_Archiv(i),'String'),'String', N);

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in Tool_Bertotti (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)Tool_Bertotti('push_Speichern_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uicontrol Callback



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)

N = get(handles.edit_Materialname,'String');
Str = get(handles.pop_Archiv,'String');
Str{end+1} = N;
set(handles.pop_Archiv,'String',Str);
guidata(hObject, handles);
Private Nachricht senden Benutzer-Profile anzeigen
 
Sporisha
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2015, 11:14     Titel:
  Antworten mit Zitat      
Kleines Update: Es taucht nun doch eine Fehlermeldung im push_Speichern_Callback auf...

Code:

Cell contents assignment to a non-cell array object.

Error in Tool_Bertotti>push_Speichern_Callback (line 118)
Str{end+1} = N;

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in Tool_Bertotti (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)Tool_Bertotti('push_Speichern_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uicontrol Callback


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... Smile

Zuletzt bearbeitet von Sporisha am 30.04.2015, 11:39, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.04.2015, 11:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Mein allgemeines Problem bei der GUI-Programmierung ist, dass ich den Code nicht mittels Workspace+CommandWindow testen kann...

Kannst du doch? Haltepunkt setzen, und du kannst dir die Daten im Workspace ansehen und im Command Window experimentieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sporisha
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2015, 12:05     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

Zitat:
Mein allgemeines Problem bei der GUI-Programmierung ist, dass ich den Code nicht mittels Workspace+CommandWindow testen kann...

Kannst du doch? Haltepunkt setzen, und du kannst dir die Daten im Workspace ansehen und im Command Window experimentieren.

Grüße,
Harald



Danke Harald für die sehr hilfreiche Info! Dachte auch das kanns so nicht sein, aber bin bis jetzt halt immer ohne den Debugger klar gekommen^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Sporisha
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2015, 14:04     Titel:
  Antworten mit Zitat      
Also die Archivierung funktioniert wie gewünscht... hier das Wesentliche vom Code:

Code:

function Tool_Bertotti_OpeningFcn(hObject, eventdata, handles, varargin)
% 3 vordefinierte Materialien fürs Popup-Menü
handles.Archiv_Daten{1} = {'NO20' '2007000' '7650' '0.193'};
handles.Archiv_Daten{2} = {'NO35' '2028000' '7650' '0.343'};
handles.Archiv_Daten{3} = {'NO50' '2005000' '7650' '0.491'};
handles.output = hObject;
guidata(hObject, handles);

% 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...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.04.2015, 15:59     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sporisha
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 05.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2015, 10:32     Titel:
  Antworten mit Zitat      
Nochmal danke Harald!
Habe mithilfe deiner Empfehlung nun auch das Archiv zum Laufen gebracht Smile

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! Very Happy Danke dafür!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.