[Python-checkins] cpython (merge 3.4 -> default): Merge with 3.4

terry.reedy python-checkins at python.org
Sun Jun 22 07:21:17 CEST 2014


http://hg.python.org/cpython/rev/3f4abe3107ce
changeset:   91313:3f4abe3107ce
parent:      91310:b1c7f28f9c0a
parent:      91312:1ae2382417dc
user:        Terry Jan Reedy <tjreedy at udel.edu>
date:        Sun Jun 22 01:20:52 2014 -0400
summary:
  Merge with 3.4

files:
  Lib/turtledemo/clock.py         |  36 +++++----
  Lib/turtledemo/demohelp.txt     |  74 +++++++++++++++++++++
  Lib/turtledemo/minimal_hanoi.py |  10 +-
  3 files changed, 101 insertions(+), 19 deletions(-)


diff --git a/Lib/turtledemo/clock.py b/Lib/turtledemo/clock.py
--- a/Lib/turtledemo/clock.py
+++ b/Lib/turtledemo/clock.py
@@ -11,6 +11,7 @@
   ------------------------------------
 """
 from turtle import *
+from turtle import Terminator  # not in __all__
 from datetime import datetime
 
 mode("logo")
@@ -102,22 +103,25 @@
     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)
diff --git a/Lib/turtledemo/demohelp.txt b/Lib/turtledemo/demohelp.txt
new file mode 100644
--- /dev/null
+++ b/Lib/turtledemo/demohelp.txt
@@ -0,0 +1,74 @@
+
+
+  ----------------------------------------------
+
+      turtleDemo - Help
+
+  ----------------------------------------------
+
+  This document has two sections:
+
+  (1) How to use the demo viewer
+  (2) How to add your own demos to the demo repository
+
+
+  (1) How to use the demo viewer.
+
+  Select a demoscript from the example menu.
+  The (syntax coloured) source code appears in the left
+  source code window. IT CANNOT BE EDITED, but ONLY VIEWED!
+
+  - Press START button to start the demo.
+  - Stop execution by pressing the STOP button.
+  - Clear screen by pressing the CLEAR button.
+  - Restart by pressing the START button again.
+
+  SPECIAL demos are those which run EVENTDRIVEN.
+  (For example clock.py - or oldTurtleDemo.py which
+  in the end expects a mouse click.):
+
+      Press START button to start the demo.
+
+      - Until the EVENTLOOP is entered everything works
+      as in an ordinary demo script.
+
+      - When the EVENTLOOP is entered, you control the
+      application by using the mouse and/or keys (or it's
+      controlled by some timer events)
+      To stop it you can and must press the STOP button.
+
+      While the EVENTLOOP is running, the examples menu is disabled.
+
+      - Only after having pressed the STOP button, you may
+      restart it or choose another example script.
+
+   * * * * * * * *
+   In some rare situations there may occur interferences/conflicts
+   between events concerning the demo script and those concerning the
+   demo-viewer. (They run in the same process.) Strange behaviour may be
+   the consequence and in the worst case you must close and restart the
+   viewer.
+   * * * * * * * *
+
+
+   (2) How to add your own demos to the demo repository
+
+   - place: same directory as turtledemo/__main__.py
+
+   - requirements on source code:
+       code must contain a main() function which will
+       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.)
+
+       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.)
+
diff --git a/Lib/turtledemo/minimal_hanoi.py b/Lib/turtledemo/minimal_hanoi.py
--- a/Lib/turtledemo/minimal_hanoi.py
+++ b/Lib/turtledemo/minimal_hanoi.py
@@ -18,6 +18,7 @@
  ---------------------------------------
 """
 from turtle import *
+from turtle import Terminator  # not in __all__
 
 class Disc(Turtle):
     def __init__(self, n):
@@ -50,9 +51,12 @@
 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

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list