]> granicus.if.org Git - python/commitdiff
Issue #21882: In turtle demos, remove module scope gui and sys calls by
authorTerry Jan Reedy <tjreedy@udel.edu>
Mon, 30 Jun 2014 20:09:24 +0000 (16:09 -0400)
committerTerry Jan Reedy <tjreedy@udel.edu>
Mon, 30 Jun 2014 20:09:24 +0000 (16:09 -0400)
either deleting or moving to the module's main function.

Lib/turtle.py
Lib/turtledemo/clock.py
Lib/turtledemo/colormixer.py
Lib/turtledemo/demohelp.txt
Lib/turtledemo/minimal_hanoi.py
Lib/turtledemo/nim.py
Lib/turtledemo/two_canvases.py

index 3d1d3b060d324d02cf273d9b0da693f0e036c3dc..465d6e065d16f9eca8b2d398c0a5ad65a3e1b75c 100644 (file)
@@ -140,7 +140,7 @@ _tg_turtle_functions = ['back', 'backward', 'begin_fill', 'begin_poly', 'bk',
 _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',
index b7a2f36646c9921f4bfd8cee8138717c84c95e15..62c8851606b34e3f0189e6c7a71912b7f1f65b44 100755 (executable)
@@ -11,11 +11,8 @@ and time
   ------------------------------------
 """
 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 @@ def make_hand_shape(name, laenge, spitze):
     hand_form = get_poly()
     register_shape(name, hand_form)
 
-
 def clockface(radius):
     reset()
     pensize(7)
@@ -84,7 +80,6 @@ def setup():
     writer.pu()
     writer.bk(85)
 
-
 def wochentag(t):
     wochentag = ["Monday", "Tuesday", "Wednesday",
         "Thursday", "Friday", "Saturday", "Sunday"]
@@ -131,6 +126,7 @@ def main():
     return "EVENTLOOP"
 
 if __name__ == "__main__":
+    mode("logo")
     msg = main()
     print(msg)
     mainloop()
index f5d308d443055fcfb5411e71719ac24b06aa6631..448db83361a649eff317733a5b932a1989a8697f 100644 (file)
@@ -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):
 
index 5a7f557e7e4cf03b7cb05881cdf5c954ab3aa24d..11842e10d345e235f4692ebe678c3441335e76d1 100644 (file)
@@ -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
 
index 5e9c27b53675981a277f765bb3f23057a4887c47..4a432f2b2908d5ec6c18640fe856044bddc8a7f6 100755 (executable)
@@ -18,7 +18,6 @@ stretched to rectangles by shapesize()
  ---------------------------------------
 """
 from turtle import *
-from turtle import Terminator  # not in __all__
 
 class Disc(Turtle):
     def __init__(self, n):
index 792ba515348267ad0c223e86e689c6b52a0b1502..25ff3128f6c0b5fe87e9fc499c1b28183230f583 100644 (file)
@@ -143,7 +143,6 @@ class NimView(object):
         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 @@ class NimView(object):
         if self.game.state == Nim.OVER:
             self.screen.clear()
 
+
 class NimController(object):
 
     def __init__(self, game):
@@ -201,6 +201,7 @@ class NimController(object):
         self.game.model.notify_move(row, col)
         self.BUSY = False
 
+
 class Nim(object):
     CREATED = 0
     RUNNING = 1
@@ -213,11 +214,10 @@ class Nim(object):
         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!"
 
index 26882caccf72c3231c426f5107b58909b0be39b7..d579876616ff97ea23cf309412c8f8b5f5bcd286 100755 (executable)
@@ -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)
-
-## Want to get some info?
-
-#print(s1, s2)
-#print(p, q)
-#print(s1.turtles())
-#print(s2.turtles())
-
-TK.mainloop()
+        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)
+
+    return "EVENTLOOP"
+
+
+if __name__ == '__main__':
+    main()
+    TK.mainloop()  # keep window open until user closes it