ich habe folgendes Problem. Und zwar bin ich aktuell an der GUI-Programmierung dran. Ich möchte über zwei Pop-Up-Menüs jeweils Bilder auswählen (im ersten entweder ein Bild von einem Elefanten oder von einem Frosch, im zweiten entweder ein Bild von einer Biene oder von einer Ente). Das ausgewählte Bild aus dem ersten Pop-Up-Menü soll als erstes Bild in einer axes dargestellt werden. Das ausgewählte Bild aus dem zweiten Pop-Up-Menü soll dann direkt neben dem ersten ausgewählten Bild angeordnet werden. Jetzt ist meine Frage, wie ich dies realisiere. Bisher habe ich lediglich in den Callback-Functions die Auswahlkriterien geschrieben:
Code:
function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu1 Text zur ausgewählten Nummer des Eintrags
switch(str{val}) case 'Elefant'
function popupmenu2_Callback(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu2 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu2 Text zur ausgewählten Nummer des Eintrags
switch(str{val}) case 'Biene'
Ich habe das aneinanderfügen jetzt wie folgt gelöst:
Code:
function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to pum1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns pum1 contents as cell array % contents{get(hObject,'Value')} returns selected item from pum1
A = imread('Elefant.jpg')
B = imread('Frosch.jpg') % Nummer des ausgewählten Menü-Eintrags
val = get(handles.popupmenu1, 'Value');
% Liste der Einträge im Pop-up-Menü
str = get(handles.popupmenu1, 'String');
% Text zur ausgewählten Nummer des Eintrags switch(str{val}) case 'Elefant'
axes(handles.axes1);
image(A);
handles.bild1 = A;
axisimage;
axis off;
case 'Frosch'
axes(handles.axes1);
image(B);
handles.bild1 = B;
axisimage;
axis off;
end guidata(hObject, handles);
function popupmenu2_Callback(hObject, eventdata, handles) % hObject handle to pum1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns pum1 contents as cell array % contents{get(hObject,'Value')} returns selected item from pum1
A = imread('Biene.jpg')
B = imread('Frosch.jpg')
C = imread('Biene.jpg')
D = imread('Ente.jpg') % Nummer des ausgewählten Menü-Eintrags
val = get(handles.popupmenu2, 'Value');
% Liste der Einträge im Pop-up-Menü
str = get(handles.popupmenu2, 'String');
% Text zur ausgewählten Nummer des Eintrags switch(str{val}) case 'Biene'
axes(handles.axes1);
handles.bild2 = horzcat(handles.bild1,C);
image(C);
axisimage;
axis off;
case 'Ente'
axes(handles.axes1);
handles.bild2 = horzcat(handles.bild1,D);
image(B);
axisimage;
axis off;
end guidata(hObject, handles);
ein Vorschlag hinsichtlich Performance wäre, wirklich nur die Bilder zu laden, die du anzeigen willst.
Noch besser wäre es, wenn du die Bilder einmalig lädst und als Anwendungsdaten hinterlegst:
http://de.mathworks.com/help/matlab.....data-among-callbacks.html
Danke für den Tipp Harald! Denn genau die Preformance ist ein Problem bei meiner Lösung. Allerdings verstehe/weiß ich nicht genau, wie ich das ganze anders lösen könnte. Ich steige bei dem Link, den du mir geschickt hast, nicht so ganz durch. Könntest du es mir vllt. anhand eines Beispiels oder optimalerweise anhand meines Beispiels erklären?
Vielen Dank für die sehr flotte Antwort Harald.
Ich glaube, ich habe es dank deiner Ausführungen verstanden. Ich werde es gleich mal ausprobieren.
Grüße
Max
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.