for-schleife durch benutzer unterbrechen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

ich habe ein programm, in dem eine animation in einem matplotlib-plotfenster gezeigt wird, die über eine for-schleife im mouse_click_event abläuft.

nun will ich für diese for-schleife (und damit die animation) eine abbruchfunktion. meine idee ist, dass durch ein event (z. b. key_press_event) eine globale variable auf True gesetzt wird, die in der for-schleife in jedem schritt abgefragt wird und bei diesem wert break ausführen. also sozusagen:

Code: Alles auswählen

global quitanimation
for i in array:
    if quitanimation:
        break()
    # hier steht der animationsschritt fuer das plotfenster 
das problem ist jetzt aber, dass solange die for-schleife läuft, alle anderen events scheinbar "warten" müssen und auch die Tk-widgets meines programms nicht reagieren.

ist es überhaupt möglich, eine solche abbruchbedingung hinzubekommen?
lunar

Das ist das normale Verhalten aller GUIs, wenn du komplexe Berechnungen im Hauptthread ausführst. Dann blockiert die GUI, weil die Event-Schleife natürlich nicht mehr weiter abgearbeitet wird.

Die übliche Taktik zur Vermeidung derartiger Missstände ist die Auslagerung der Animation in einen separaten Thread. Dann bleibt die GUI funktionsfähig, und die Abbruchbedingung kann ganz einfach durch eine Event-Objekt aus dem threading Modul repräsentiert werden.

Btw, die Verwendung globaler Variablen solltest du vermeiden. Schreibe lieber eine Klasse für die GUI.
Antworten