summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2014-06-30 16:09:24 -0400
committerTerry Jan Reedy <tjreedy@udel.edu>2014-06-30 16:09:24 -0400
commitf5ac57dc05818e4fe2ff5118680fe136937d768e (patch)
tree28c5be50f2bc8a0cdc6d77a61bf0bb079461c642
parent98b6391fd4b27485b17c068d6f85a00d3f7c5ddc (diff)
downloadcpython-git-f5ac57dc05818e4fe2ff5118680fe136937d768e.tar.gz
Issue #21882: In turtle demos, remove module scope gui and sys calls by
either deleting or moving to the module's main function.
-rw-r--r--Lib/turtle.py2
-rwxr-xr-xLib/turtledemo/clock.py6
-rw-r--r--Lib/turtledemo/colormixer.py2
-rw-r--r--Lib/turtledemo/demohelp.txt5
-rwxr-xr-xLib/turtledemo/minimal_hanoi.py1
-rw-r--r--Lib/turtledemo/nim.py10
-rwxr-xr-xLib/turtledemo/two_canvases.py86
7 files changed, 51 insertions, 61 deletions
diff --git a/Lib/turtle.py b/Lib/turtle.py
index 3d1d3b060d..465d6e065d 100644
--- a/Lib/turtle.py
+++ b/Lib/turtle.py
@@ -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',
diff --git a/Lib/turtledemo/clock.py b/Lib/turtledemo/clock.py
index b7a2f36646..62c8851606 100755
--- a/Lib/turtledemo/clock.py
+++ b/Lib/turtledemo/clock.py
@@ -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()
diff --git a/Lib/turtledemo/colormixer.py b/Lib/turtledemo/colormixer.py
index f5d308d443..448db83361 100644
--- 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
index 5a7f557e7e..11842e10d3 100644
--- 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
index 5e9c27b536..4a432f2b29 100755
--- a/Lib/turtledemo/minimal_hanoi.py
+++ b/Lib/turtledemo/minimal_hanoi.py
@@ -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):
diff --git a/Lib/turtledemo/nim.py b/Lib/turtledemo/nim.py
index 792ba51534..25ff3128f6 100644
--- a/Lib/turtledemo/nim.py
+++ b/Lib/turtledemo/nim.py
@@ -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!"
diff --git a/Lib/turtledemo/two_canvases.py b/Lib/turtledemo/two_canvases.py
index 26882caccf..d579876616 100755
--- 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)
-
-## 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