Verfasst am: 08.07.2007, 19:51
Titel: GUI und Callback
Mmmmm ...
wie müßte ich die Aufgabenstellung "wenn der Startbutton gedrückt wurde, dann rotiere in einer Schleife und erst mit dem Drücken des Endbutton stoppen" umsetzten?
Denn so:
Code:
function startButton_Callback(hObject, eventdata, handles)
Wenn ich also den Start-Button drücke, wird die Steuervarible auf 0 gesetzt und die Schleife läuft durch. Sobald der Stopbutton gedrückt wird, wird die variable auf 1 gesetzt und die Schleife wird beendet.
Wie gesagt, ein Trivialbeispiel. Ich nutze die Zellen mit weit mehr Variablen, je nach Anzahl der Aufgaben.
geht es nicht! Scheinbar kann die zweite Funktion nicht dazwischenfunken, es sieht also nach sequentieller Abarbeitung aus. Wenn man allerdings eine 1-Sekunden-Pause einbaut:
geht es auf einmal! Jetzt kann man in der Pause den Stop-Button drücken und die Schleife hält tatsächlich an. Fand ich bemerkenswert, daher habe ich es gepostet, obwohl die Anfrage schon so lang her ist.
Herzliche Grüße
Bijick
_________________
>> why
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.09.2007, 20:11
Titel:
Noch eine Variante - mit nur einer Taste.
Code:
function while_loop_control
figure uicontrol('style','togglebutton','string','start','callback',@do_something)
vielen Dank für Eure Anmerkungen ... ich habe mich noch mal mit der Frage beschäftigt und in meinem Lieblingsbuch "Mastering Matlab" die Aussage gefunden, die Eure Programmbeispiele bestätigt:
In all cases a callback executes until it reaches a waitfor, waitforbuttonpress, drawnow, getframe, pause or figure command. Callbacks that not contain any of these commands cannot be interrupted.
Also muss eines der Schlüsselworte in der function auftauchen ...
also ich habs versucht und langsam werd ich verrückt!
der button "start" setzt etwa folgende schleife in gang:
Code:
while frame < numel(stack_properties) % hier wird jetzt ein RGB-Bild zusammengesetzt und über imshow ausgegeben drawnow ifget(handles.stopp,'Value')
waitfor(handles.stopp,'Value',0) end end
% --- Executes on button press in stopp. function stopp_Callback(hObject, eventdata, handles) % hObject handle to stopp (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % uiwait set(handles.stopp,'Value',1) guidata(hObject, handles);
er will mir die schleife aber bei besten willen nicht stoppen, mit uiwait klappt es, aber wenn ich uiresume benutze und in der zwischenzeit paar werte über andere buttons verändert habe gibt mit die schleife nen fehler, weil sie noch mit den alten werten arbeitet?
habs jetzt mit nem Panel und 2 gekoppelten radiobuttons gelöst...
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.