2017-02-07 2 views
1

Ich baue eine GUI, die Bilder zeigt, wenn ich einen Knopf drücke, aber es gibt eine Menge Bilder, und manchmal möchte ich über eine Reihe von Bildern springen, also was ich versuche zu tun ist, zu bekommen eine edit texbox, wo ich die Nummer des Bildes, das ich gehen möchte, setze, drücke eine Taste, um die andere Taste zu drücken, bis ich zum gewünschten Bild komme. Ich möchte diesen Weg gehen (indem ich den anderen Knopf x-mal drücke, um zum gewünschten Bild zu gelangen), weil parallel zur gleichen Zeit eine Menge paralleler Dinge passiert, die das Bild an das andere weitergibt.Machen Sie eine Taste drücken Sie eine andere Taste. Matlab GUI

so meinen Code für die Schaltfläche ist:

function pushbutton14_Callback(hObject, eventdata, handles) 
% hObject handle to pushbutton14 (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
i = str2double(get(handles.edit4, 'String')); 
while handles.counterN < i 
    pushbutton1_Callback(hObject, eventdata, handles); 
    guidata(hObject, handles); 
end 

Also jedes Mal, wenn ich Knopf drücken 14, ich will, um es auf die Schaltfläche 1, bis der Zähler zu drücken (die 1n jedem Drücken des Knopfes 1 hinzugefügt wird gedrückt wird) erreicht den Wert in edit4.

Aber aus irgendeinem Grund die guidata nicht aktualisiert wird, so wird der Zähler bleibt immer als 1.

I guidata(hObject, handles);, am Ende der Taste 1 Funktion haben ... so ist, ich verstehe nicht, warum nicht aktualisiert, habe ich auch ohne guidata(hObject, handles); in der while-Schleife versucht

+0

Ich habe gerade meine Antwort aktualisiert. Vergessen Sie, dass Sie den Zähler zu Beginn der Schleife benötigen. –

Antwort

2

pushbutton1_Callback inkrementieren handles.counterN, aber Sie erhalten nie den inkrementierten Wert. In der Tat überschreiben Sie es sofort mit 1, wenn dieser Rückruf zurückkehrt. Denken Sie daran, dass im Rahmen der pushbutton14_Callback, handles.counterN ist 1. pushbutton1_Callback kann den Zähler inkrementieren, aber nicht im Rahmen der aufrufenden Funktion. Wenn Sie guidata einstellen, wird der Wert in pushbutton14_Callback nicht aktualisiert, bis Sie handles = guidata(hObject); aufrufen. Da pushbutton1_Callback bereits guidata(hObject, handles); genannt hat, erhalten stattdessen die Daten der Einstellung:

ersetzen guidata(hObject, handles); mit handles = guidata(hObject);.

Verwandte Themen