[Python-checkins] cpython (3.4): Issue #21882: In turtle demos, remove module scope gui and sys calls by

terry.reedy python-checkins at python.org
Mon Jun 30 22:10:16 CEST 2014


http://hg.python.org/cpython/rev/fcfa9c5a00fd
changeset:   91488:fcfa9c5a00fd
branch:      3.4
parent:      91485:13e78b9cf290
user:        Terry Jan Reedy <tjreedy at udel.edu>
date:        Mon Jun 30 16:09:24 2014 -0400
summary:
  Issue #21882: In turtle demos, remove module scope gui and sys calls by
either deleting or moving to the module's main function.

files:
  Lib/turtle.py                   |   2 +-
  Lib/turtledemo/clock.py         |   6 +-
  Lib/turtledemo/colormixer.py    |   2 -
  Lib/turtledemo/demohelp.txt     |   5 +-
  Lib/turtledemo/minimal_hanoi.py |   1 -
  Lib/turtledemo/nim.py           |  10 +-
  Lib/turtledemo/two_canvases.py  |  80 +++++++++-----------
  7 files changed, 48 insertions(+), 58 deletions(-)


diff --git a/Lib/turtle.py b/Lib/turtle.py
--- a/Lib/turtle.py
+++ b/Lib/turtle.py
@@ -140,7 +140,7 @@
 _tg_utilities = ['write_docstringdict', 'done']
 
 __all__ = (_tg_classes + _tg_screen_functions + _tg_turtle_functions +
-           _tg_utilities) # + _math_functions)
+           _tg_utilities + ['Terminator']) # + _math_functions)
 
 _alias_list = ['addshape', 'backward', 'bk', 'fd', 'ht', 'lt', 'pd', 'pos',
                'pu', 'rt', 'seth', 'setpos', 'setposition', 'st',
diff --git a/Lib/turtledemo/clock.py b/Lib/turtledemo/clock.py
--- a/Lib/turtledemo/clock.py
+++ b/Lib/turtledemo/clock.py
@@ -11,11 +11,8 @@
   ------------------------------------
 """
 from turtle import *
-from turtle import Terminator  # not in __all__
 from datetime import datetime
 
-mode("logo")
-
 def jump(distanz, winkel=0):
     penup()
     right(winkel)
@@ -43,7 +40,6 @@
     hand_form = get_poly()
     register_shape(name, hand_form)
 
-
 def clockface(radius):
     reset()
     pensize(7)
@@ -84,7 +80,6 @@
     writer.pu()
     writer.bk(85)
 
-
 def wochentag(t):
     wochentag = ["Monday", "Tuesday", "Wednesday",
         "Thursday", "Friday", "Saturday", "Sunday"]
@@ -131,6 +126,7 @@
     return "EVENTLOOP"
 
 if __name__ == "__main__":
+    mode("logo")
     msg = main()
     print(msg)
     mainloop()
diff --git a/Lib/turtledemo/colormixer.py b/Lib/turtledemo/colormixer.py
--- a/Lib/turtledemo/colormixer.py
+++ b/Lib/turtledemo/colormixer.py
@@ -1,8 +1,6 @@
 # colormixer
 
 from turtle import Screen, Turtle, mainloop
-import sys
-sys.setrecursionlimit(20000)   # overcomes, for now, an instability of Python 3.0
 
 class ColorTurtle(Turtle):
 
diff --git a/Lib/turtledemo/demohelp.txt b/Lib/turtledemo/demohelp.txt
--- a/Lib/turtledemo/demohelp.txt
+++ b/Lib/turtledemo/demohelp.txt
@@ -54,6 +54,9 @@
    (2) How to add your own demos to the demo repository
 
    - Place the file in the same directory as turtledemo/__main__.py
+     IMPORTANT! When imported, the demo should not modify the system
+     by calling functions in other modules, such as sys, tkinter, or
+     turtle. Global variables should be initialized in main().
 
    - The code must contain a main() function which will
      be executed by the viewer (see provided example scripts).
@@ -65,7 +68,7 @@
 
     if __name__ == '__main__':
         main()
-        mainloop()  # keep window
+        mainloop()  # keep window open
 
     python -m turtledemo.mydemo  # will then run it
 
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,7 +18,6 @@
  ---------------------------------------
 """
 from turtle import *
-from turtle import Terminator  # not in __all__
 
 class Disc(Turtle):
     def __init__(self, n):
diff --git a/Lib/turtledemo/nim.py b/Lib/turtledemo/nim.py
--- a/Lib/turtledemo/nim.py
+++ b/Lib/turtledemo/nim.py
@@ -143,7 +143,6 @@
         self.writer.write(msg1, align="center", font=("Courier",14,"bold"))
         self.screen.tracer(True)
 
-
     def setup(self):
         self.screen.tracer(False)
         for row in range(3):
@@ -181,6 +180,7 @@
         if self.game.state == Nim.OVER:
             self.screen.clear()
 
+
 class NimController(object):
 
     def __init__(self, game):
@@ -201,6 +201,7 @@
         self.game.model.notify_move(row, col)
         self.BUSY = False
 
+
 class Nim(object):
     CREATED = 0
     RUNNING = 1
@@ -213,11 +214,10 @@
         self.controller = NimController(self)
 
 
-mainscreen = turtle.Screen()
-mainscreen.mode("standard")
-mainscreen.setup(SCREENWIDTH, SCREENHEIGHT)
-
 def main():
+    mainscreen = turtle.Screen()
+    mainscreen.mode("standard")
+    mainscreen.setup(SCREENWIDTH, SCREENHEIGHT)
     nim = Nim(mainscreen)
     return "EVENTLOOP!"
 
diff --git a/Lib/turtledemo/two_canvases.py b/Lib/turtledemo/two_canvases.py
--- a/Lib/turtledemo/two_canvases.py
+++ b/Lib/turtledemo/two_canvases.py
@@ -1,60 +1,54 @@
 """turtledemo.two_canvases
 
 Use TurtleScreen and RawTurtle to draw on two
-distinct canvases.
+distinct canvases in a separate windows. The
+new window must be separately closed in
+addition to pressing the STOP button.
 """
-#The final mainloop only serves to keep the window open.
-
-#TODO: This runs in its own two-canvas window when selected in the
-#demoviewer examples menu but the text is not loaded and the previous
-#example is left visible. If the ending mainloop is removed, the text
-#Eis loaded, this run again in a third window, and if start is pressed,
-#demoviewer raises an error because main is not found, and  then freezes.
 
 from turtle import TurtleScreen, RawTurtle, TK
 
-root = TK.Tk()
-cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
-cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
-cv1.pack()
-cv2.pack()
+def main():
+    root = TK.Tk()
+    cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
+    cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
+    cv1.pack()
+    cv2.pack()
 
-s1 = TurtleScreen(cv1)
-s1.bgcolor(0.85, 0.85, 1)
-s2 = TurtleScreen(cv2)
-s2.bgcolor(1, 0.85, 0.85)
+    s1 = TurtleScreen(cv1)
+    s1.bgcolor(0.85, 0.85, 1)
+    s2 = TurtleScreen(cv2)
+    s2.bgcolor(1, 0.85, 0.85)
 
-p = RawTurtle(s1)
-q = RawTurtle(s2)
+    p = RawTurtle(s1)
+    q = RawTurtle(s2)
 
-p.color("red", (1, 0.85, 0.85))
-p.width(3)
-q.color("blue", (0.85, 0.85, 1))
-q.width(3)
+    p.color("red", (1, 0.85, 0.85))
+    p.width(3)
+    q.color("blue", (0.85, 0.85, 1))
+    q.width(3)
 
-for t in p,q:
-    t.shape("turtle")
-    t.lt(36)
+    for t in p,q:
+        t.shape("turtle")
+        t.lt(36)
 
-q.lt(180)
+    q.lt(180)
 
-for t in p, q:
-    t.begin_fill()
-for i in range(5):
     for t in p, q:
-        t.fd(50)
-        t.lt(72)
-for t in p,q:
-    t.end_fill()
-    t.lt(54)
-    t.pu()
-    t.bk(50)
+        t.begin_fill()
+    for i in range(5):
+        for t in p, q:
+            t.fd(50)
+            t.lt(72)
+    for t in p,q:
+        t.end_fill()
+        t.lt(54)
+        t.pu()
+        t.bk(50)
 
-## Want to get some info?
+    return "EVENTLOOP"
 
-#print(s1, s2)
-#print(p, q)
-#print(s1.turtles())
-#print(s2.turtles())
 
-TK.mainloop()
+if __name__ == '__main__':
+    main()
+    TK.mainloop()  # keep window open until user closes it

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


More information about the Python-checkins mailing list