]> granicus.if.org Git - python/commitdiff
Issue #21823: Catch turtle.Terminator exceptions in turtledemo.
authorTerry Jan Reedy <tjreedy@udel.edu>
Sun, 22 Jun 2014 05:18:54 +0000 (01:18 -0400)
committerTerry Jan Reedy <tjreedy@udel.edu>
Sun, 22 Jun 2014 05:18:54 +0000 (01:18 -0400)
Add note to demohelp.txt about doing so.

Lib/turtledemo/clock.py
Lib/turtledemo/demohelp.txt
Lib/turtledemo/minimal_hanoi.py

index a0d157ba49d2b3a91d28822e2696775b4bd83451..b7a2f36646c9921f4bfd8cee8138717c84c95e15 100755 (executable)
@@ -11,6 +11,7 @@ and time
   ------------------------------------
 """
 from turtle import *
+from turtle import Terminator  # not in __all__
 from datetime import datetime
 
 mode("logo")
@@ -102,22 +103,25 @@ def tick():
     sekunde = t.second + t.microsecond*0.000001
     minute = t.minute + sekunde/60.0
     stunde = t.hour + minute/60.0
-    tracer(False)
-    writer.clear()
-    writer.home()
-    writer.forward(65)
-    writer.write(wochentag(t),
-                 align="center", font=("Courier", 14, "bold"))
-    writer.back(150)
-    writer.write(datum(t),
-                 align="center", font=("Courier", 14, "bold"))
-    writer.forward(85)
-    tracer(True)
-    second_hand.setheading(6*sekunde)
-    minute_hand.setheading(6*minute)
-    hour_hand.setheading(30*stunde)
-    tracer(True)
-    ontimer(tick, 100)
+    try:
+        tracer(False)  # Terminator can occur here
+        writer.clear()
+        writer.home()
+        writer.forward(65)
+        writer.write(wochentag(t),
+                     align="center", font=("Courier", 14, "bold"))
+        writer.back(150)
+        writer.write(datum(t),
+                     align="center", font=("Courier", 14, "bold"))
+        writer.forward(85)
+        tracer(True)
+        second_hand.setheading(6*sekunde)  # or here
+        minute_hand.setheading(6*minute)
+        hour_hand.setheading(30*stunde)
+        tracer(True)
+        ontimer(tick, 100)
+    except Terminator:
+        pass  # turtledemo user pressed STOP
 
 def main():
     tracer(False)
index fe83bc760196358967a967f8c5496e9b69f7bb39..96af26d8530a8a999ec3af41e6ddcdc3dafd7756 100644 (file)
        be executed by the viewer (see provided example scripts)
        main() may return a string which will be displayed
        in the Label below the source code window (when execution
-       has finished.) 
+       has finished.)
 
-       !! For programs, which are EVENT DRIVEN, main must return
-       !! the string "EVENTLOOP". This informs the viewer, that the
-       !! script is still running and must be stopped by the user!
+       If the demo is EVENT DRIVEN, main must return the string
+       "EVENTLOOP". This informs the demo viewer that the script is
+       still running and must be stopped by the user!
+
+       If an "EVENTLOOP" demo runs by itself, as with clock, which uses
+       ontimer, or minimal_hanoi, which loops by recursion, then the
+       code should catch the turtle.Terminator exception that will be
+       raised when the user presses the STOP button.  (Paint is not such
+       a demo; it only acts in response to mouse clicks and movements.)
 
-        
-  
index cfb78dcac1418fa0328031dd78fe6f4df74e339a..5e9c27b53675981a277f765bb3f23057a4887c47 100755 (executable)
@@ -18,6 +18,7 @@ stretched to rectangles by shapesize()
  ---------------------------------------
 """
 from turtle import *
+from turtle import Terminator  # not in __all__
 
 class Disc(Turtle):
     def __init__(self, n):
@@ -50,9 +51,12 @@ def hanoi(n, from_, with_, to_):
 def play():
     onkey(None,"space")
     clear()
-    hanoi(6, t1, t2, t3)
-    write("press STOP button to exit",
-          align="center", font=("Courier", 16, "bold"))
+    try:
+        hanoi(6, t1, t2, t3)
+        write("press STOP button to exit",
+              align="center", font=("Courier", 16, "bold"))
+    except Terminator:
+        pass  # turtledemo user pressed STOP
 
 def main():
     global t1, t2, t3