diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2014-06-30 20:09:16 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2014-06-30 20:09:16 (GMT) |
commit | f7f746a82859d94d4f7bee7842e6b28db051554a (patch) | |
tree | f6558a7b6041242d18e80d8078826a9d26669a35 /Demo | |
parent | 04a37be9e55e8f1e6b913bd5ded14533226c13b7 (diff) | |
download | cpython-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.txt | 3 | ||||
-rwxr-xr-x | Demo/turtle/tdemo_clock.py | 8 | ||||
-rwxr-xr-x | Demo/turtle/tdemo_minimal_hanoi.py | 1 | ||||
-rw-r--r-- | Demo/turtle/tdemo_nim.py | 27 | ||||
-rw-r--r-- | Demo/turtle/tdemo_two_canvases.py | 54 | ||||
-rwxr-xr-x | Demo/turtle/turtledemo_two_canvases.py | 49 |
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() |