Brechen aus for-Schleife in MATLAB-GUI
Ich habe eine for
Schleife in die öffnen-Funktion der GUI in MATLAB und ich bin versucht, einen Rückruf-Taste, die Schleife zu brechen. Ich bin neu in MATLAB. Hier der code, den ich habe:
%In the opening function of the GUI
handles.stop_now = 0;
for i=1:inf
if handles.stop_now==1
break;
end
end
% Executes on button press
function pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to end_segmenting_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.stop_now=1;
guidata(hObject, handles);
Aus irgendeinem Grund, trotz der Festlegung der Variablen mit den Griffen, die Schleife bricht nicht beim drücken der Taste. Wer weiß, was Los ist??? Danke.
InformationsquelleAutor Nick | 2010-12-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem, das Sie haben ist, dass die Struktur des übergebenen Werte zu der öffnen-Funktion für
handles
ist fest auf was auch immer es war, wenn der öffnen-Funktion aufgerufen wurde. Sie nie abrufen der neuen Struktur, die aktualisiert wird, vonpushbutton_Callback
. Sie können abrufen, die der neuen Struktur durch den Aufruf GUIDATA in der Schleife. Hier ist, wie würde ich vorschlagen, Sie versuchen schreiben Sie Ihre Schleife:Die größeren GUI-design-Problem...
Aufgrund der zusätzlichen Beschreibung in Ihrem Kommentar über das, was Sie versuchen zu erreichen, mit Ihrem GUI, ich glaube, es gibt einen besseren Weg, um design. Anstatt eine endlose Schleife, die für den Benutzer mehrfach eingegeben ROIs, die Sie dann haben, eine Taste zu drücken, um zu stoppen, Sie können tun, Weg mit der Schleife und die stop-Taste, und fügen Sie ein "Fügen Sie ein ROI" - Taste, um Ihre GUI. Auf diese Weise kann der Benutzer nur eine Taste drücken, wenn Sie möchten, fügen Sie eine weitere ROI. Sie können ersetzen Sie zuerst die for-Schleife in die öffnen-Funktion mit den folgenden Initialisierungen:
Dann können Sie ersetzen die callback für Ihre Schaltfläche, wie so etwas wie die folgenden:
In Ihrer Umsetzung
break
wird die Schleife beendet und der Kontrollfluss geht zuimfreehand()
. Daher sollten Sie verwendenreturn
stattbreak
.Hmmm..., die nicht scheinen, um den trick zu tun.
Vielen Dank für all die Hilfe. Die Sache ist die, ich bin mit dem Programm segment biologischen Bildern. In einem Bild, das ich brauchen könnte, um im segment bis zu 20 unterschiedliche Objekte, also würde ich eher nicht über die der Benutzer drücken eine Taste, jedes mal, wenn er/Sie braucht, um eine zusätzliche Rendite. Ich Frage mich nur, ob es irgendeine Möglichkeit, um zu bekommen das problem das ich habe mit dem aktuellen set-up.
Ich mehr oder weniger benötige code ausgeführt werden soll, mit "Strg-C".
InformationsquelleAutor gnovice
Sehe ich zwei potentielle Probleme hier.
Erste: variable
handles
ist keine Referenz, Einstellunghandles.stop_now=1;
geht "verloren", nachdem Ablaufsteuerung beendetpushbutton_Callback
. Verwenden guidata oder andere Ansätze zum speichern und abrufen von Daten.Zweites problem: Funktion verwenden drawnow(). Sehen dieser Artikel von Yair Altman für die gute Erklärung.
Zusammenfassung: MATLAB graphics in Java, Swing und IO-Operationen (wie das drücken einer Taste) geschehen, in einem speziellen thread - Event-Dispatch-Thread (EDT). Aufruf von drawnow(); Flush Ereignis-queue und updates Abbildung Fenster.
setzen
drawnow()
in der Schleife!InformationsquelleAutor Mikhail