Hallo,
Ich habe eine Gui mit einer Tabelle (3 Spalten), für die ich mittels eines Buttons eine neue Zeile hinzufügen möchte. Der Inhalt der neuen Zeile wird über drei Textfelder definiert. Die funktionierende Version sieht so aus.
allerding möchte ich jetzt nicht nur Zahlen, sondern auch Text hinzufügen und schaffe es nicht den Code anzupassen.
Wieß jemand weiter?
Vielen Dank,
Jürgen
eventuell müsstest du auch noch b vorher umwandeln mit "mat2cell"... allerdings habe ich das jetzt noch nicht ausprobiert.
Ich hoffe ich konnte helfen,
Sigi
juergenre
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.02.2015, 11:08
Titel:
Hallo Sigi,
Vielen Dank für deine Hilfe! Ich habe das ausprobiert, und es funktioniert, sprich: er nimmt die Werte jetzt als Cell-werte an, allerdings schaffe ich es nicht Werte nicht zurück in das uitable zu bringen
Nochmal vielen Dank für deine Hilfe, allerdings funktioniert es bei mir immer noch nicht (habe extra deinen Code mit copy/paste übernommen um mich nciht zu verschreiben), jetzt kommt die Meldung "Error using double:
Conversion to double from cell is not possible." in der Zeile
die eckigen Klammern auf der rechten Seite des Gleichheitszeichen weglasse.
Hast du alles kopiert? Und welche Matlab Version hast du?
juergenre
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.02.2015, 12:27
Titel:
Ja, hatte deinen kompletten Code kopiert. Ich benutze 2012a.
Welche eckingen Klammern? die geschweiften, oder die runden?
juergenre
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.02.2015, 12:40
Titel:
Hi Sigi,
Ich will ein wenig weiter ausholen, um Missverständnisse zu vermeiden:
in edit1 steht eine Zahl, z.B. "1", in edit2 steht ebenfalls eine Zahl, "2" und in edit3 steht Text, "name" und in der Tabelle soll das ganze so aussehen
1 2 name_a
3 4 name_b
... etc
Falls du die Zahlen dann irgendwann auslesen willst und als zahlen interpretieren möchtest (für Rechnungen oder Vergleiche) müsstest du halt str2num() verwenden. Damit erhälst du dann aus dem String eine Zahl.
juergenre
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.02.2015, 13:07
Titel:
Hallo Sigi,
Das mit den Zahlen als Strings, so wie von dir vorgeschlagen, habe ich auch scohn ausprobiert, leider ebenfalls ohne Erfolg, trotzdem aber Danke. Es kommt wieder "Conversion to double from cell is not possible." in Zeile
also da, wo er c wieder in die Matrix schreiben möchte
Könnte es vielleicht daran liegen, dass b als numerische Matrix angesehen wird, und c, als cell, erst in eine Zahl umgewandelt werden müsste, was eben nicht geht?
ah ja natürlich, dein Tabelleninhalt der bereits in der Tabelle ist, besteht wahrscheinlich nur aus Zahlen oder?
Dann kann es gut sein, das b bei dir eine Matrix ist. Ist es möglich den Tabelleninhalt zu ändern? Also dort von Anfang an ein Cell reinzuschreiben und keine Matrix?
Falls das nicht möglich ist sollte folgender Code jetzt endlich wirklich mal funktionieren:
Code:
b=get(handles.uitable1, 'data');
if ~iscell(b)
b = mat2cell(b,ones(1,length(b)),[111]);
end
c{1,1}=get(handles.edit1, 'string');
c{1,2}=get(handles.edit2, 'string');
c{1,3}=get(handles.edit3, 'string');
b(end+1,1) = c{1,1};
b(end,2) = c{1,2};
b(end,3) = c{1,3};
set(handles.uitable1, 'data', b);
definiert und dann im property Inspector der Tabelle als "DATA" angegeben. Jetzt kann ich weitere Zeilen in der selben Form (zahl, zahl, text) hinzufügen. Eine kleine Frage hätte ich aber noch. Jetzt steht, wenn man die GUI öffnet ja die erste Zeile ("1", "2", und "erstername") bereits in der Tabelle. Wie kann ich mit einer leeren Tabelle anfangen?
Vielen Dank für die bisherige Hilfe!
Jürgen
Um eine leere Tabelle zu erhalten, muss du im PropertyInspector unter Data "Change data value to the selected workspace variable below" auswählen und dort dann eine vorher erstellte Variable wählen, die leer ist.
Beispiel:
tmp=[]
Eine andere Möglichkeit besteht darin, die Tabelle im Code zu leeren.
Dazu würde ich eine CreateFcn für die Tabelle erstellen, um darin die Tabelle zu leeren.
Ein Beispiel siehst du hier:
Code:
% --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
b=get(handles.uitable1, 'data');
ifisempty(b)
b=cell(0,3) end if ~iscell(b)
b = mat2cell(b,ones(1,length(b)),[111]);
end
c{1,1}=get(handles.edit1, 'string')
c{1,2}=get(handles.edit2, 'string')
c{1,3}=get(handles.edit3, 'string')
b(end+1,1) = c{1,1};
b(end,2) = c{1,2};
b(end,3) = c{1,3};
set(handles.uitable1, 'data', b);
% --- Executes during object creation, after setting all properties. function uitable1_CreateFcn(hObject, eventdata, handles) % hObject handle to uitable1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called
in jedem Fall (auch bei dem PropertyInspector) ergänzt werden müssen!
juergenre
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.02.2015, 18:00
Titel:
Vielen Dank, Sigi, es hat alles wunderbar funktioniert!
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.