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

either deleting or moving to the module's main function.
This commit is contained in:
Terry Jan Reedy 2014-06-30 16:09:24 -04:00
parent 98b6391fd4
commit f5ac57dc05
7 changed files with 48 additions and 58 deletions

View 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',

View File

@ -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()

View 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):

View 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

View File

@ -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):

View 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!"

View File

@ -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:
for t in p,q:
t.shape("turtle")
t.lt(36)
q.lt(180)
q.lt(180)
for t in p, q:
for t in p, q:
t.begin_fill()
for i in range(5):
for i in range(5):
for t in p, q:
t.fd(50)
t.lt(72)
for t in p,q:
for t in p,q:
t.end_fill()
t.lt(54)
t.pu()
t.bk(50)
## Want to get some info?
return "EVENTLOOP"
#print(s1, s2)
#print(p, q)
#print(s1.turtles())
#print(s2.turtles())
TK.mainloop()
if __name__ == '__main__':
main()
TK.mainloop() # keep window open until user closes it