mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
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:
parent
98b6391fd4
commit
f5ac57dc05
7 changed files with 48 additions and 58 deletions
|
@ -140,7 +140,7 @@ _tg_turtle_functions = ['back', 'backward', 'begin_fill', 'begin_poly', 'bk',
|
||||||
_tg_utilities = ['write_docstringdict', 'done']
|
_tg_utilities = ['write_docstringdict', 'done']
|
||||||
|
|
||||||
__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',
|
||||||
|
|
|
@ -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):
|
||||||
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():
|
||||||
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():
|
||||||
return "EVENTLOOP"
|
return "EVENTLOOP"
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
mode("logo")
|
||||||
msg = main()
|
msg = main()
|
||||||
print(msg)
|
print(msg)
|
||||||
mainloop()
|
mainloop()
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
# colormixer
|
# colormixer
|
||||||
|
|
||||||
from turtle import Screen, Turtle, mainloop
|
from turtle import Screen, Turtle, mainloop
|
||||||
import sys
|
|
||||||
sys.setrecursionlimit(20000) # overcomes, for now, an instability of Python 3.0
|
|
||||||
|
|
||||||
class ColorTurtle(Turtle):
|
class ColorTurtle(Turtle):
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,9 @@
|
||||||
(2) How to add your own demos to the demo repository
|
(2) How to add your own demos to the demo repository
|
||||||
|
|
||||||
- Place the file in the same directory as turtledemo/__main__.py
|
- 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
|
- The code must contain a main() function which will
|
||||||
be executed by the viewer (see provided example scripts).
|
be executed by the viewer (see provided example scripts).
|
||||||
|
@ -65,7 +68,7 @@
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
mainloop() # keep window
|
mainloop() # keep window open
|
||||||
|
|
||||||
python -m turtledemo.mydemo # will then run it
|
python -m turtledemo.mydemo # will then run it
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -143,7 +143,6 @@ class NimView(object):
|
||||||
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)
|
||||||
for row in range(3):
|
for row in range(3):
|
||||||
|
@ -181,6 +180,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):
|
||||||
|
@ -201,6 +201,7 @@ class NimController(object):
|
||||||
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
|
||||||
|
@ -213,11 +214,10 @@ class Nim(object):
|
||||||
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!"
|
||||||
|
|
||||||
|
|
|
@ -1,60 +1,54 @@
|
||||||
"""turtledemo.two_canvases
|
"""turtledemo.two_canvases
|
||||||
|
|
||||||
Use TurtleScreen and RawTurtle to draw on two
|
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
|
from turtle import TurtleScreen, RawTurtle, TK
|
||||||
|
|
||||||
root = TK.Tk()
|
def main():
|
||||||
cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
|
root = TK.Tk()
|
||||||
cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
|
cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
|
||||||
cv1.pack()
|
cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
|
||||||
cv2.pack()
|
cv1.pack()
|
||||||
|
cv2.pack()
|
||||||
|
|
||||||
s1 = TurtleScreen(cv1)
|
s1 = TurtleScreen(cv1)
|
||||||
s1.bgcolor(0.85, 0.85, 1)
|
s1.bgcolor(0.85, 0.85, 1)
|
||||||
s2 = TurtleScreen(cv2)
|
s2 = TurtleScreen(cv2)
|
||||||
s2.bgcolor(1, 0.85, 0.85)
|
s2.bgcolor(1, 0.85, 0.85)
|
||||||
|
|
||||||
p = RawTurtle(s1)
|
p = RawTurtle(s1)
|
||||||
q = RawTurtle(s2)
|
q = RawTurtle(s2)
|
||||||
|
|
||||||
p.color("red", (1, 0.85, 0.85))
|
p.color("red", (1, 0.85, 0.85))
|
||||||
p.width(3)
|
p.width(3)
|
||||||
q.color("blue", (0.85, 0.85, 1))
|
q.color("blue", (0.85, 0.85, 1))
|
||||||
q.width(3)
|
q.width(3)
|
||||||
|
|
||||||
for t in p,q:
|
for t in p,q:
|
||||||
t.shape("turtle")
|
t.shape("turtle")
|
||||||
t.lt(36)
|
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:
|
for t in p, q:
|
||||||
t.fd(50)
|
t.begin_fill()
|
||||||
t.lt(72)
|
for i in range(5):
|
||||||
for t in p,q:
|
for t in p, q:
|
||||||
t.end_fill()
|
t.fd(50)
|
||||||
t.lt(54)
|
t.lt(72)
|
||||||
t.pu()
|
for t in p,q:
|
||||||
t.bk(50)
|
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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue