gh-65772: Clean-up turtle module (#104218)

* Remove the unused, private, and undocumented name `_ver` and
the commented-out `print` call.

* Don't add math functions to `__all__`.  Beginners should learn
to `import math` to access them.

* Gregor Lindel, who wrote this version of turtle, dropped plans
to implement turtle on another toolkit at least a decade ago.
Drop `_dot` code preparing for this, but add a hint comment.

* `_Screen` is meant to be a singleton class.  To enforce that,
it needs either a `__new__` that returns the singleton or
`else...raise` in `__iter__`.  Merely removing the `if` clauses
as suggested might break something if a user were to call `_Screen`
directly.  Leave the code alone until a problem is evident.

* Turtledemo injects into _Screen both _root and _canvas,
configured as it needs them to be.  Making _canvas an `__init__`
option would require skipping some but not all of the lines under
'if _Screen._canvas is None:`.  Leave working code alone.
This commit is contained in:
Terry Jan Reedy 2023-05-06 11:04:41 -04:00 committed by GitHub
parent 6616710731
commit e407661e7a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 40 deletions

View file

@ -21,7 +21,6 @@
# misrepresented as being the original software. # misrepresented as being the original software.
# 3. This notice may not be removed or altered from any source distribution. # 3. This notice may not be removed or altered from any source distribution.
""" """
Turtle graphics is a popular way for introducing programming to Turtle graphics is a popular way for introducing programming to
kids. It was part of the original Logo programming language developed kids. It was part of the original Logo programming language developed
@ -97,13 +96,8 @@ Roughly it has the following features added:
Behind the scenes there are some features included with possible Behind the scenes there are some features included with possible
extensions in mind. These will be commented and documented elsewhere. extensions in mind. These will be commented and documented elsewhere.
""" """
_ver = "turtle 1.1b- - for Python 3.1 - 4. 5. 2009"
# print(_ver)
import tkinter as TK import tkinter as TK
import types import types
import math import math
@ -141,7 +135,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 + ['Terminator']) # + _math_functions) _tg_utilities + ['Terminator'])
_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',
@ -598,9 +592,6 @@ class TurtleScreenBase(object):
x0, y0, x1, y1 = self.cv.bbox(item) x0, y0, x1, y1 = self.cv.bbox(item)
return item, x1-1 return item, x1-1
## def _dot(self, pos, size, color):
## """may be implemented for some other graphics toolkit"""
def _onclick(self, item, fun, num=1, add=None): def _onclick(self, item, fun, num=1, add=None):
"""Bind fun to mouse-click event on turtle. """Bind fun to mouse-click event on turtle.
fun must be a function with two arguments, the coordinates fun must be a function with two arguments, the coordinates
@ -3455,12 +3446,7 @@ class RawTurtle(TPen, TNavigator):
if size is None: if size is None:
size = self._pensize + max(self._pensize, 4) size = self._pensize + max(self._pensize, 4)
color = self._colorstr(color) color = self._colorstr(color)
if hasattr(self.screen, "_dot"): # If screen were to gain a dot function, see GH #104218.
item = self.screen._dot(self._position, size, color)
self.items.append(item)
if self.undobuffer:
self.undobuffer.push(("dot", item))
else:
pen = self.pen() pen = self.pen()
if self.undobuffer: if self.undobuffer:
self.undobuffer.push(["seq"]) self.undobuffer.push(["seq"])
@ -3751,11 +3737,6 @@ class _Screen(TurtleScreen):
_title = _CFG["title"] _title = _CFG["title"]
def __init__(self): def __init__(self):
# XXX there is no need for this code to be conditional,
# as there will be only a single _Screen instance, anyway
# XXX actually, the turtle demo is injecting root window,
# so perhaps the conditional creation of a root should be
# preserved (perhaps by passing it as an optional parameter)
if _Screen._root is None: if _Screen._root is None:
_Screen._root = self._root = _Root() _Screen._root = self._root = _Root()
self._root.title(_Screen._title) self._root.title(_Screen._title)

View file

@ -0,0 +1 @@
Remove unneeded comments and code in turtle.py.