WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

"Retry" und "Continue" Buttons

 

confuso
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2011, 17:33     Titel: "Retry" und "Continue" Buttons
  Antworten mit Zitat      
Moin,
ich habe eine for Schleife, bei der am Ende jeder Iteration eine gefragt werden soll, ob man die Iteration erneut ausführen möchte oder zur nächsten gehen will. Mein Versuch bis jetzt:

Code:

for i=1:length(data)
 % many tasks...
 ...


 % question:
 h = uicontrol('Position',[20 20 200 40],'String','Continue',...
              'Callback','uiresume(gcbf)');
 h2 = uicontrol('Position',[240 20 200 40],'String','Retry',...
              'Callback','???????????);
  uiwait(gcf);
end


Meine Frage ist nun, was muss ich mit dem Callback von h2 machen??? Ich kriegs einfach nicht hin.

Hoffe ihr könnt mir helfen...
mfg

ps: questdlg kann ich dafür nicht nehmen, weil ich die Buttons in miene Gui einbinden und kein popup haben möchte.
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 09.02.2011, 18:09     Titel:
  Antworten mit Zitat      
Hallo


schaue dir WAITFOR,
so könnte man das hier lösen
Code:

 h   = figure();
% question:
 hbc = uicontrol('Position',[20 20 200 40],'String','Continue',...
              'Callback','set(h,''Userdata'',''continue'')');
 hbr = uicontrol('Position',[240 20 200 40],'String','Retry',...
              'Callback','set(h,''Userdata'',''retry'')');

for i=1:5  
  fprintf('Warte %d: ',i);
  waitfor(h,'Userdata');
  fprintf('%s pressed\n',get(h,'UserData'))
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
confuso
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2011, 19:10     Titel:
  Antworten mit Zitat      
a super danke! wie bekomme ich es jetzt noch hin dass die iteration für das gleiche i nochmal durchgeführt wird? hatte gehofft, dass es mit

i=i-1; geht, aber funktioniert scheinbar nicht:

Code:
h   = figure();
% question:
 hbc = uicontrol('Position',[20 20 200 40],'String','Continue',...
              'Callback','set(h,''Userdata'',''continue'')');
 hbr = uicontrol('Position',[240 20 200 40],'String','Retry',...
              'Callback','set(h,''Userdata'',''retry'')');

for i=1:5  
    i
  waitfor(h,'Userdata');
  if strcmp(get(h,'UserData'),'retry')
      i=i-1;
  end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 09.02.2011, 19:48     Titel:
  Antworten mit Zitat      
Hey,

meinst du sowas?

Code:

i=0;
while i<=4
  waitfor(h,'Userdata');
  if ~strcmp(get(h,'UserData'),'retry')
      i = i+1;
  end
  i % nur für ausgabekontrolle gedacht
  set(h,'UserData',[])
end
 


MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
confuso
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2011, 19:52     Titel:
  Antworten mit Zitat      
Hmm ja so koennt ichs natuerlich machen. Eigentlich waere mir ne for Schleife lieber da ich ja nen fest vorgegebenen Datensatz habe, aber da waers ja eig auch gefuscht.... da waere ein Befehl neben "continue" und "break" praktisch Very Happy

Okay denke damit bekomms ichs zum laufen, thx


edit: ah, jetzt hab ichs Very Happy for und while verschachteln sollte am elegantesten sein Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
confuso
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 09:12     Titel:
  Antworten mit Zitat      
Arg es geht doch nicht... Das ganze soll im Callback einer Gui stehen, also sieht mein Code z.Z. so aus:

Code:
   
function analyse_OpeningFcn(hObject, eventdata, handles, varargin)
% data input...
for i=1:length(data)
while(true)
% data analyse
...
        h = figure();
        set(h,'Visible','off');
        hbc = uicontrol(hObject,'Position',[20 20 200 40],'String','Continue',...
                  'Callback','set(h,''UserData'',''continue'')');
        hbr = uicontrol(hObject,'Position',[240 20 200 40],'String','Retry',...
                  'Callback','set(h,''UserData'',''retry'')');
        guidata(hObject, handles);

        waitfor(h,'UserData');
        if strcmp(get(h,'UserData'),'continue')
            disp('continue..');
            break;
        else
            disp('retry..');
        end
        delete(hbc);
        delete(hbr);
        delete(h);
    end
end


leider passiert gar nix wenn ich auf die Buttons klicke... auch keine Fehlermeldung...
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.02.2011, 10:31     Titel:
  Antworten mit Zitat      
Hallo

irgend wie missverstehe ich dich,
was machst du da?
Das wäre mit QUESTDLG doch besser lösbar?

Code:

for i=1:length(data)
while(true)
% data analyse
out = questdlg('qstring','title','continue','retry','continue')
         waitfor(out);
        if strcmp(out,'continue')
            disp('continue..');
            break;
        else
            disp('retry..');
        end
     end
end



 
Private Nachricht senden Benutzer-Profile anzeigen
 
confuso
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 11:42     Titel:
  Antworten mit Zitat      
ich möchte eigentlich kein Popup haben sondern die beiden Buttons in meine gui einbinden, dass ist der Grund Very Happy wenn ich den questdlg nicht als popup sondern als elemente in meiner gui darstellen könnte, wäre das kein Problem...

der Grund weil ich kein popup haben möchte ist, dass ich ein Bild bearbeiten möchte und das Bild möglichst vollständig sichtbar sein muss. Ein Popup würde halt nur stören.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.02.2011, 12:48     Titel:
  Antworten mit Zitat      
Aber wie du es bisher realisiert hast, entspricht doch auch einem Popup-Fenster?
Private Nachricht senden Benutzer-Profile anzeigen
 
confuso
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 12:50     Titel:
  Antworten mit Zitat      
nee, das waren alles elemente in einer schon bestehenden gui, in der auch das bild implementiert ist. deswegen auch

set(h,'Visible','off')

bzw für die Controls

uicontrol(hObject,....), wobei hObject meine gui ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 10.02.2011, 13:13     Titel:
  Antworten mit Zitat      
Hallo

dann brauchst du doch kein extra Fenster.
außerdem erzeugst du ja ständig in der Schleife Buttons, die du später löschst.
Ist doch nicht nötig. Die Buttons müssen fest verankert in der GUI sein,sonst verwirrst nur den User.

ich denke,das sollte so aussehen:
Code:

handles.hbc = uicontrol(hObject,'Position',[20 20 200 40],'String','Continue',...
   'Callback','set(hObject,''UserData'',''continue'')');
handles.hbr = uicontrol(hObject,'Position',[240 20 200 40],'String','Retry',...
   'Callback','set(hObject,''UserData'',''retry'')');

k = 1;
while k <= length(data)
   % data analyse
   ...
   

   
   waitfor(hObject,'UserData');
   if strcmp(get(hObject,'UserData'),'continue')
      disp('continue..');
      k = k+1;
   else
      disp('retry..');
   end
end
guidata(hObject, handles);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
confuso
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 12.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2011, 14:22     Titel:
  Antworten mit Zitat      
ne also, das mach schon durchaus Sinn wie ich mir das Überlegt habe. Also ich erklärs mal n bisschen detallierter:


Ich habe ein Datensatz mit Bildern, die einzeln ausgelesen werden sollen
Dann sollen verschiedene Aufgaben erledigt werden, nach denen ich teilweise Fragen möchte, ob die Aufgabe denn so ausgeführt wurde, wie man es haben wollte
Dann zur nächsten Aufgabe (in der selben Iteration)
Es gibt ein "Status" Feld, wo drin steht, was gerade gemacht werden soll und der Text soll halt an den passenden Stellen durch die Buttons ersetzt werden.
Kann natürlich auch Visible=off einfach machen aber das hat beim rumprobieren ärger gemacht, kp warum

Also verwirrt wird man da nicht. Hinzu kommt, dass das Programm nur von 3-4 Leuten benutzt wird, denen ich alle eine Einführung geben könnte Very Happy


Ich kann erstmal keinen so großen Unterschied zwischen deiner und meiner Lösung finden, werds aber nachher mal ausprobieren. Danke soweit erstmal.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.