summaryrefslogtreecommitdiffstats
path: root/Demo
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2014-06-30 20:09:16 (GMT)
committerTerry Jan Reedy <tjreedy@udel.edu>2014-06-30 20:09:16 (GMT)
commitf7f746a82859d94d4f7bee7842e6b28db051554a (patch)
treef6558a7b6041242d18e80d8078826a9d26669a35 /Demo
parent04a37be9e55e8f1e6b913bd5ded14533226c13b7 (diff)
downloadcpython-f7f746a82859d94d4f7bee7842e6b28db051554a.zip
cpython-f7f746a82859d94d4f7bee7842e6b28db051554a.tar.gz
cpython-f7f746a82859d94d4f7bee7842e6b28db051554a.tar.bz2
Issue #21882: In turtle demos, remove module scope gui and sys calls by
moving them to the module's main function.
Diffstat (limited to 'Demo')
-rw-r--r--Demo/turtle/demohelp.txt3
-rwxr-xr-xDemo/turtle/tdemo_clock.py8
-rwxr-xr-xDemo/turtle/tdemo_minimal_hanoi.py1
-rw-r--r--Demo/turtle/tdemo_nim.py27
-rw-r--r--Demo/turtle/tdemo_two_canvases.py54
-rwxr-xr-xDemo/turtle/turtledemo_two_canvases.py49
6 files changed, 72 insertions, 70 deletions
diff --git a/Demo/turtle/demohelp.txt b/Demo/turtle/demohelp.txt
index d364e94..7d13763 100644
--- a/Demo/turtle/demohelp.txt
+++ b/Demo/turtle/demohelp.txt
@@ -52,6 +52,9 @@
(2) How to add your own demos to the demo repository
+ 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 script name must begin with tdemo_ ,
so it must have the form tdemo_<your-script-name>.py
diff --git a/Demo/turtle/tdemo_clock.py b/Demo/turtle/tdemo_clock.py
index d4e0686..1d6eb80 100755
--- a/Demo/turtle/tdemo_clock.py
+++ b/Demo/turtle/tdemo_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()
+ mainloop() # keep window open
diff --git a/Demo/turtle/tdemo_minimal_hanoi.py b/Demo/turtle/tdemo_minimal_hanoi.py
index 3cb9efc..86001b6 100755
--- a/Demo/turtle/tdemo_minimal_hanoi.py
+++ b/Demo/turtle/tdemo_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/Demo/turtle/tdemo_nim.py b/Demo/turtle/tdemo_nim.py
index 8e66d7e..d739457 100644
--- a/Demo/turtle/tdemo_nim.py
+++ b/Demo/turtle/tdemo_nim.py
@@ -1,7 +1,7 @@
""" turtle-example-suite:
tdemo_nim.py
-
+
Play nim against the computer. The player
who takes the last stick is the winner.
@@ -41,7 +41,7 @@ def computerzug(state):
return move
def randommove(state):
- m = max(state)
+ m = max(state)
while True:
z = random.randint(0,2)
if state[z] > (m > 1):
@@ -62,7 +62,7 @@ class NimModel(object):
self.winner = None
self.game.view.setup()
self.game.state = Nim.RUNNING
-
+
def move(self, row, col):
maxspalte = self.sticks[row]
self.sticks[row] = col
@@ -76,7 +76,7 @@ class NimModel(object):
row, col = computerzug(self.sticks)
self.move(row, col)
self.player = 0
-
+
def game_over(self):
return self.sticks == [0, 0, 0]
@@ -100,13 +100,13 @@ class Stick(turtle.Turtle):
self.goto(x,y)
self.color("white")
self.showturtle()
-
+
def coords(self, row, col):
packet, remainder = divmod(col, 5)
x = (3 + 11 * packet + 2 * remainder) * WUNIT
y = (2 + 3 * row) * HUNIT
return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2
-
+
def makemove(self, x, y):
if self.game.state != Nim.RUNNING:
return
@@ -142,7 +142,7 @@ class NimView(object):
self.writer.pencolor("black")
self.writer.write(msg1, align="center", font=("Courier",14,"bold"))
self.screen.tracer(True)
-
+
def setup(self):
self.screen.tracer(False)
@@ -181,6 +181,7 @@ class NimView(object):
if self.game.state == Nim.OVER:
self.screen.clear()
+
class NimController(object):
def __init__(self, game):
@@ -200,28 +201,26 @@ class NimController(object):
self.BUSY = True
self.game.model.notify_move(row, col)
self.BUSY = False
-
+
class Nim(object):
CREATED = 0
RUNNING = 1
OVER = 2
def __init__(self, screen):
- self.state = Nim.CREATED
+ self.state = Nim.CREATED
self.screen = screen
self.model = NimModel(self)
self.view = NimView(self)
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!"
if __name__ == "__main__":
main()
turtle.mainloop()
-
diff --git a/Demo/turtle/tdemo_two_canvases.py b/Demo/turtle/tdemo_two_canvases.py
new file mode 100644
index 0000000..d579876
--- /dev/null
+++ b/Demo/turtle/tdemo_two_canvases.py
@@ -0,0 +1,54 @@
+"""turtledemo.two_canvases
+
+Use TurtleScreen and RawTurtle to draw on two
+distinct canvases in a separate windows. The
+new window must be separately closed in
+addition to pressing the STOP button.
+"""
+
+from turtle import TurtleScreen, RawTurtle, TK
+
+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)
+
+ 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)
+
+ for t in p,q:
+ t.shape("turtle")
+ t.lt(36)
+
+ 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)
+
+ return "EVENTLOOP"
+
+
+if __name__ == '__main__':
+ main()
+ TK.mainloop() # keep window open until user closes it
diff --git a/Demo/turtle/turtledemo_two_canvases.py b/Demo/turtle/turtledemo_two_canvases.py
deleted file mode 100755
index 5a9831d..0000000
--- a/Demo/turtle/turtledemo_two_canvases.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-## DEMONSTRATES USE OF 2 CANVASES, SO CANNOT BE RUN IN DEMOVIEWER!
-"""turtle example: Using TurtleScreen and RawTurtle
-for drawing on two distinct canvases.
-"""
-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()
-
-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.color("red", "white")
-p.width(3)
-q.color("blue", "black")
-q.width(3)
-
-for t in p,q:
- t.shape("turtle")
- t.lt(36)
-
-q.lt(180)
-
-for i in range(5):
- for t in p, q:
- t.fd(50)
- t.lt(72)
-for t in p,q:
- 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()