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

GUI-Komponenten verwenden während Callback-Funktion läuft

 

Knappe Franz
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2011, 11:35     Titel: GUI-Komponenten verwenden während Callback-Funktion läuft
  Antworten mit Zitat      
Hallo!

ich bin grad irgendwie nicht fähig eine Lösung für folgendes Problem zu finden:

Ich habe eine GUI, die eine große Anzahl Dateien analysiert und plottet, nachdem man auf einen "Start"-Button gedrückt hat. Der ganze Vorgang steckt also in einer Schleife in der Callback-Fct von "Start". Um die Qualität der Daten/Analysen einzuschätzen, ist es hilfreich sich von den ersten paar Dateien ein Diagramm etwas genauer anzuschauen. Da die Schleife für einen Durchlauf aber weniger als eine Sekunde braucht, ist das zu kurz für eine hinreichende Betrachtung. Ich habe daher einfach pause(x) eingebaut. Jetzt möchte ich gern die Pausenzeit dynamisch während des Callback-Durchlaufs durch eine andere GUI-Komponente (im Moment Slider) steuern, damit man die Pause je nach Belieben verlängern oder verkürzen kann um schneller fertig zu werden, wenn man die Daten nicht mehr anschauen möchte.

Jetzt reagiert die GUI aber nicht auf die Klicks auf den Slider, während die andere Callback-Fct ausgeführt wird.

Bei meinen Recherchen hab ich gesehen, dass man in anderen Grafikpaketen wohl irgendwie den eventlistener der GUI auch während einer Callback-Schleife aufrufen kann (irgendwie mit check), aber dazu habe ich leider nichts für die Standart-Matlab-GUI gefunden Sad

Gibts da eine Möglichkeit oder geht das generell nicht, die GUI während einer Callback-Fct zu benutzen? Fällt euch vllt eine andere Lösung meines Problems ein außer über eine GUI-Komponente?

Danke für die Hilfe!
Grüße
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: 01.06.2011, 12:36     Titel:
  Antworten mit Zitat      
Hey,
wäre es nicht besser eine z.B. msgbox einzufügen mit:
Code:

uiwait(msgbox('Nächste Messung?','Weiter','help'))
 


Anders ist es natürlich auch möglich aber umständlicher...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.06.2011, 12:41     Titel: Re: GUI-Komponenten verwenden während Callback-Funktion lä
  Antworten mit Zitat      
Hallo Knappe Franz,

Ein Update der GUI-Elemente erfolgt, wenn ein DRAWNOW-Befehl innerhalb des Callback-Codes dafür die Zeit gibt.

Gruß, Jan
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: 01.06.2011, 12:49     Titel:
  Antworten mit Zitat      
Hey,

oder drawnow expose. Das ist sogar noch schneller... Nur ändert sich dadurch dein handles-struct im Callback der for schleife nicht (bzw. alle nicht handles im Struct handles). Dies ist zu beachten...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
Knappe Franz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2011, 11:16     Titel:
  Antworten mit Zitat      
Danke für eure schnellen Antworten!

Ich war leider über Himmelfahrt unterwegs, deswegen so spät meine Reaktion.. sorry!

Eine msgbox möchte ich gern umgehen, da man so nicht einfach irgendwann das Programm rechnen lassen kann, sondern nach jeder Datei klicken muss.. Das geht gar nicht, bei mehr als 100 Dateien pro Messung..

Drawnow hab ich schon in der Hauptschleife drinstehen.. Trotzdem passiert nichts, wenn ich auf meine Slider-Pfeile klicke, während die Schleife läuft Sad Wenn sie fertig ist, funktionierts dann wieder Wink

Mein Aufbau ist ungefähr so:

Code:

function start_callback(blabla)
  % Starwerte
  for 1:anzahlDateien
    %Datenanalyse
    % Werte plotten (teilweise auch in Schleifen)
    drawnow
    paus = str2num(get(handles.EDIT_pause,'String'));
    if paus > 0
         pause(paus);
    end
  end
  guidata(hObject, handles);

function SLIDER_pause_Callback(hObject, eventdata, handles)
    set(handles.EDIT_pause,'String',num2str(get(hObject,'Value')));
    guidata(hObject, handles);
 


Habt ihr noch eine Idee, wo ich das drawnow sinnvoller platzieren kann? Danke für eure Hilfe!
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: 06.06.2011, 12:20     Titel:
  Antworten mit Zitat      
Hey,
setz mal einen Breakpoint in deinen Slider Callback um zu schauen ob er überhaupt in diesen reinspringt. Du könntest versuchen in dem Slidercallback auch ein drawnow einzufügen. Hilft das?

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2011, 14:39     Titel:
  Antworten mit Zitat      
Ich werf nur mal so eine Idee in den Raum:

Du lässt einen Timer starten und als Timerfcn eine Datei einlesen und plotten.

Im Callback des Sliders könnte man dann den Timer anhalten, die Period neu setzen und ihn wieder starten.
 
Marco H.
Forum-Guru

Forum-Guru


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

ja natürlich kann man das auch über einen Timer machen. Nur ändert dies auch nichts an der Tatsache, dass Matlab nur einen EDT hat und alles nacheinander abläuft und somit die GUI ebenfalls geupdatet werden muss...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
Knappe Franz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2011, 15:33     Titel:
  Antworten mit Zitat      
Yeah Smile

Nu klappts Smile Ich hab ein drawnow in die Slider-Callback-Function gepackt, das hat den Erfolg gebracht! Ich danke euch vielmals!

Auch für die Geduld, dass ich so lange net geantwortet habe.. Ich arbeite leider nur einmal die Woche an dem Project..
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.