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.
kommando_pimperlepim
User
Beiträge: 23
Registriert: Dienstag 3. April 2007, 05:32

for-schleife durch benutzer unterbrechen

Beitragvon kommando_pimperlepim » Sonntag 1. Juli 2007, 12:17

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

Re: for-schleife durch benutzer unterbrechen

Beitragvon lunar » Sonntag 1. Juli 2007, 12:57

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.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]