2016-11-26 5 views
0

Ich schrieb ein Python-Skript zum Zeichnen eines Kreises von Quadraten.Schließen Turtle Graphics GUI während des Betriebs

import turtle 
angle = 0 
turn_ang = 30 
while (angle <= 360): 
    turtle.forward(100) 
    turtle.right(90) 
    turtle.forward(100) 
    turtle.right(90) 
    turtle.forward(100) 
    turtle.right(90) 
    turtle.forward(100) 
    turtle.right(90) 
    turtle.right(turn_ang) 
    angle = angle + turn_ang 
turtle.done() 

Ich möchte in der Lage sein, die Schildkröte GUI zu schließen, während es noch im Prozess des Zeichnens ist, das heißt wenn die while-Schleife ausgeführt wird. Wenn ich auf "Schließen" klicke, wird auf der Benutzeroberfläche "Nicht reagieren" angezeigt. Bitte helfen Sie.

Antwort

0

Obwohl ich Ihr Problem nicht auf meinem System reproduzieren kann, habe ich einen Vorschlag, der Ihr Problem beheben könnte. Wie derzeit entwickelt, wird Ihr Programm vollständig ausgeführt, bevor Sie die Steuerung an die Hauptschleife übergeben, d. H. Alles wird gezeichnet, bevor Sie turtle.done() aufrufen, wenn die Turtle auf Ereignisse wie das Schließen des Fensters wartet.

Lassen Sie uns einen anderen Ansatz nehmen, wo Sie Ihre Zeichnung Code geschieht nach Sie rufen turtle.done() (oder turtle.exitonclick() in meinem Beispiel), indem sie auf einem Event-Timer setzen:

import turtle 

angle = 0 
TURN_ANGLE = 30 

def square(): 
    global angle 

    for _ in range(4): 
     turtle.forward(100) 
     turtle.right(90) 

    turtle.right(TURN_ANGLE) 
    angle += TURN_ANGLE 

    if angle <= 360: 
     turtle.ontimer(square, 100) 
    else: 
     turtle.hideturtle() 

turtle.ontimer(square, 100) 

turtle.exitonclick() 

Lassen Sie uns wissen, ob das löst Ihre sofortiges Problem. Beachten Sie, dass ich Ihren Code ein wenig optimiert habe: einige Dinge, damit es als Timer-Ereignis besser funktioniert; einige Dinge, einfach weil sie danach schrieen ...

Verwandte Themen