Kaydet (Commit) f7f746a8 authored tarafından Terry Jan Reedy's avatar Terry Jan Reedy

Issue #21882: In turtle demos, remove module scope gui and sys calls by

moving them to the module's main function.
üst 04a37be9
...@@ -52,6 +52,9 @@ ...@@ -52,6 +52,9 @@
(2) How to add your own demos to the demo repository (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_ , - The script name must begin with tdemo_ ,
so it must have the form tdemo_<your-script-name>.py so it must have the form tdemo_<your-script-name>.py
......
...@@ -11,11 +11,8 @@ and time ...@@ -11,11 +11,8 @@ and time
------------------------------------ ------------------------------------
""" """
from turtle import * from turtle import *
from turtle import Terminator # not in __all__
from datetime import datetime from datetime import datetime
mode("logo")
def jump(distanz, winkel=0): def jump(distanz, winkel=0):
penup() penup()
right(winkel) right(winkel)
...@@ -43,7 +40,6 @@ def make_hand_shape(name, laenge, spitze): ...@@ -43,7 +40,6 @@ def make_hand_shape(name, laenge, spitze):
hand_form = get_poly() hand_form = get_poly()
register_shape(name, hand_form) register_shape(name, hand_form)
def clockface(radius): def clockface(radius):
reset() reset()
pensize(7) pensize(7)
...@@ -84,7 +80,6 @@ def setup(): ...@@ -84,7 +80,6 @@ def setup():
writer.pu() writer.pu()
writer.bk(85) writer.bk(85)
def wochentag(t): def wochentag(t):
wochentag = ["Monday", "Tuesday", "Wednesday", wochentag = ["Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"] "Thursday", "Friday", "Saturday", "Sunday"]
...@@ -131,6 +126,7 @@ def main(): ...@@ -131,6 +126,7 @@ def main():
return "EVENTLOOP" return "EVENTLOOP"
if __name__ == "__main__": if __name__ == "__main__":
mode("logo")
msg = main() msg = main()
print msg print msg
mainloop() mainloop() # keep window open
...@@ -18,7 +18,6 @@ stretched to rectangles by shapesize() ...@@ -18,7 +18,6 @@ stretched to rectangles by shapesize()
--------------------------------------- ---------------------------------------
""" """
from turtle import * from turtle import *
from turtle import Terminator # not in __all__
class Disc(Turtle): class Disc(Turtle):
def __init__(self, n): def __init__(self, n):
......
""" turtle-example-suite: """ turtle-example-suite:
tdemo_nim.py tdemo_nim.py
Play nim against the computer. The player Play nim against the computer. The player
who takes the last stick is the winner. who takes the last stick is the winner.
...@@ -41,7 +41,7 @@ def computerzug(state): ...@@ -41,7 +41,7 @@ def computerzug(state):
return move return move
def randommove(state): def randommove(state):
m = max(state) m = max(state)
while True: while True:
z = random.randint(0,2) z = random.randint(0,2)
if state[z] > (m > 1): if state[z] > (m > 1):
...@@ -62,7 +62,7 @@ class NimModel(object): ...@@ -62,7 +62,7 @@ class NimModel(object):
self.winner = None self.winner = None
self.game.view.setup() self.game.view.setup()
self.game.state = Nim.RUNNING self.game.state = Nim.RUNNING
def move(self, row, col): def move(self, row, col):
maxspalte = self.sticks[row] maxspalte = self.sticks[row]
self.sticks[row] = col self.sticks[row] = col
...@@ -76,7 +76,7 @@ class NimModel(object): ...@@ -76,7 +76,7 @@ class NimModel(object):
row, col = computerzug(self.sticks) row, col = computerzug(self.sticks)
self.move(row, col) self.move(row, col)
self.player = 0 self.player = 0
def game_over(self): def game_over(self):
return self.sticks == [0, 0, 0] return self.sticks == [0, 0, 0]
...@@ -100,13 +100,13 @@ class Stick(turtle.Turtle): ...@@ -100,13 +100,13 @@ class Stick(turtle.Turtle):
self.goto(x,y) self.goto(x,y)
self.color("white") self.color("white")
self.showturtle() self.showturtle()
def coords(self, row, col): def coords(self, row, col):
packet, remainder = divmod(col, 5) packet, remainder = divmod(col, 5)
x = (3 + 11 * packet + 2 * remainder) * WUNIT x = (3 + 11 * packet + 2 * remainder) * WUNIT
y = (2 + 3 * row) * HUNIT y = (2 + 3 * row) * HUNIT
return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2 return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2
def makemove(self, x, y): def makemove(self, x, y):
if self.game.state != Nim.RUNNING: if self.game.state != Nim.RUNNING:
return return
...@@ -142,7 +142,7 @@ class NimView(object): ...@@ -142,7 +142,7 @@ class NimView(object):
self.writer.pencolor("black") self.writer.pencolor("black")
self.writer.write(msg1, align="center", font=("Courier",14,"bold")) self.writer.write(msg1, align="center", font=("Courier",14,"bold"))
self.screen.tracer(True) self.screen.tracer(True)
def setup(self): def setup(self):
self.screen.tracer(False) self.screen.tracer(False)
...@@ -181,6 +181,7 @@ class NimView(object): ...@@ -181,6 +181,7 @@ class NimView(object):
if self.game.state == Nim.OVER: if self.game.state == Nim.OVER:
self.screen.clear() self.screen.clear()
class NimController(object): class NimController(object):
def __init__(self, game): def __init__(self, game):
...@@ -200,28 +201,26 @@ class NimController(object): ...@@ -200,28 +201,26 @@ class NimController(object):
self.BUSY = True self.BUSY = True
self.game.model.notify_move(row, col) self.game.model.notify_move(row, col)
self.BUSY = False self.BUSY = False
class Nim(object): class Nim(object):
CREATED = 0 CREATED = 0
RUNNING = 1 RUNNING = 1
OVER = 2 OVER = 2
def __init__(self, screen): def __init__(self, screen):
self.state = Nim.CREATED self.state = Nim.CREATED
self.screen = screen self.screen = screen
self.model = NimModel(self) self.model = NimModel(self)
self.view = NimView(self) self.view = NimView(self)
self.controller = NimController(self) self.controller = NimController(self)
mainscreen = turtle.Screen()
mainscreen.mode("standard")
mainscreen.setup(SCREENWIDTH, SCREENHEIGHT)
def main(): def main():
mainscreen = turtle.Screen()
mainscreen.mode("standard")
mainscreen.setup(SCREENWIDTH, SCREENHEIGHT)
nim = Nim(mainscreen) nim = Nim(mainscreen)
return "EVENTLOOP!" return "EVENTLOOP!"
if __name__ == "__main__": if __name__ == "__main__":
main() main()
turtle.mainloop() turtle.mainloop()
"""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
#!/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()
...@@ -142,7 +142,7 @@ _math_functions = ['acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', ...@@ -142,7 +142,7 @@ _math_functions = ['acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh',
'log10', 'modf', 'pi', 'pow', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] 'log10', 'modf', 'pi', 'pow', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
__all__ = (_tg_classes + _tg_screen_functions + _tg_turtle_functions + __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', _alias_list = ['addshape', 'backward', 'bk', 'fd', 'ht', 'lt', 'pd', 'pos',
'pu', 'rt', 'seth', 'setpos', 'setposition', 'st', 'pu', 'rt', 'seth', 'setpos', 'setposition', 'st',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment