Current File : //opt/imh-python/lib/python3.9/__pycache__/turtle.cpython-39.opt-2.pyc
a

-�he1�@s,dZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZddlm
Z
ddlmZgd�Zgd�Zgd�Zd	d
gZeeeedgZgd�Zd
dddddddddddddddddddd�Zdd �Zd!d"�Zzee�Wne�yed#�Yn0Gd$d%�d%e�Zd&d'�Zd(d)�Zd*Zdgd,d-�ZGd.d/�d/ej �Z!ee!ej"d0�Gd1d2�d2ej#�Z$ej"Z"Gd3d4�d4e%�Z&Gd5d�de�Z'Gd6d7�d7e�Z(Gd8d9�d9e%�Z)Gd:d;�d;e%�Z*Gd<d=�d=e&�Z+Gd>d?�d?e%�Z,Gd@dA�dAe%�Z-GdBdC�dCe%�Z.GdDdE�dEe-e,�Z/e/Z0dFdG�Z1GdHdI�dIe+�Z2GdJdK�dKe/�Z3e3Z4dhdMd	�Z5dNdO�Z6edPZ7ze7dk�rle6e7�Wn<e8�y�edQe7�Yn e�y�edRe7�Yn0dSdT�Z9dUdV�Z:dWdX�Z;dYZ<dZd[�Z=e=ee2d\d]e;�e=ee3d^d_e:�e>Z?e@d`k�r(dadb�ZAdcdd�ZBdedf�ZCeB�eC�eD�dS)iz-turtle 1.1b- - for Python 3.1   -  4. 5. 2009�N)�isfile�split�join)�deepcopy)�simpledialog)	�ScrolledCanvas�TurtleScreen�Screen�	RawTurtle�Turtle�RawPen�Pen�Shape�Vec2D)�addshape�bgcolor�bgpic�bye�clearscreen�	colormode�delay�exitonclick�	getcanvas�	getshapes�listen�mainloop�mode�numinput�onkey�
onkeypress�onkeyrelease�
onscreenclick�ontimer�register_shape�resetscreen�
screensize�setup�setworldcoordinates�	textinput�title�tracer�turtles�update�
window_height�window_width)O�back�backward�
begin_fill�
begin_poly�bk�circle�clear�
clearstamp�clearstamps�clone�color�degrees�distance�dot�down�end_fill�end_poly�fd�	fillcolor�filling�forward�get_poly�getpen�	getscreen�
get_shapepoly�	getturtle�goto�heading�
hideturtle�home�ht�isdown�	isvisible�left�lt�onclick�ondrag�	onrelease�pd�pen�pencolor�pendown�pensize�penup�pos�position�pu�radians�right�reset�
resizemode�rt�seth�
setheading�setpos�setposition�settiltangle�
setundobuffer�setx�sety�shape�	shapesize�shapetransform�shearfactor�
showturtle�speed�st�stamp�tilt�	tiltangle�towards�
turtlesize�undo�undobufferentries�up�width�write�xcor�ycor�write_docstringdict�done�
Terminator)rr0r3r@rMrQrUr[r]rbrcrerfrqrvryrz��?g�?i�i,�standard��?�
i��classic�black�noresizeT�english�turtle�screenzPython Turtle GraphicsF)rz�height�	canvwidth�
canvheight�	leftright�	topbottomrrr�undobuffersizerkrWrAra�visible�language�
exampleturtle�
examplescreenr)�
using_IDLEc	Cs�t|d��}|��}Wd�n1s(0Yi}|D]�}|��}|r:|�d�rVq:z|�d�\}}Wn&ty�td||f�Yq:Yn0|��}|��}|dvr�t|�}n2zd|vr�t|�}nt	|�}Wnty�Yn0|||<q:|S)N�r�#�=zBad line in config-file %s:
%s)�True�False�Nonez''z""�.)
�open�	readlines�strip�
startswithr�
ValueError�print�eval�float�int)�filename�fZcfglines�cfgdict�line�key�value�r��'/opt/imh-python/lib/python3.9/turtle.py�config_dict�s0&



r�cCs�d}i}i}t|�rt|�}d|vr0d|d}ztt�\}}t||�}Wnty`d}Yn0t|�rrt|�}t�|�t�|�dS)Nz
turtle.cfgZimportconfigz
turtle_%s.cfg�)rr�r�__file__r�	Exception�_CFGr,)r�Zdefault_cfgZcfgdict1Zcfgdict2�head�tailZ	cfg_file2r�r�r��
readconfig�s 


r�z"No configfile read, reason unknownc@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)rcCst�|||f�S�N)�tuple�__new__)�cls�x�yr�r�r�r��sz
Vec2D.__new__cCs"t|d|d|d|d�S�Nr��r��self�otherr�r�r��__add__�sz
Vec2D.__add__cCsDt|t�r*|d|d|d|dSt|d||d|�Sr�)�
isinstancerr�r�r�r��__mul__�s
 z
Vec2D.__mul__cCs2t|t�st|t�r.t|d||d|�StSr�)r�r�r�r�NotImplementedr�r�r�r��__rmul__szVec2D.__rmul__cCs"t|d|d|d|d�Sr�r�r�r�r�r��__sub__sz
Vec2D.__sub__cCst|d|d�Sr�r��r�r�r�r��__neg__sz
Vec2D.__neg__cCs|dd|dddS)Nr�r�r�r�r�r�r�r��__abs__
sz
Vec2D.__abs__cCsjt|d|d�}|tjd}t�|�t�|�}}t|d||d||d||d|�S)Nr�r��f@)r�math�pi�cos�sin)r��angleZperp�c�sr�r�r��rotateszVec2D.rotatecCs|d|dfSr�r�r�r�r�r��__getnewargs__szVec2D.__getnewargs__cCsd|S)Nz(%.2f,%.2f)r�r�r�r�r��__repr__szVec2D.__repr__N)
�__name__�
__module__�__qualname__r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�srcCsTt|j�}|��|D]}t||�q|j��D]\}}t|�tjkr0|||<q0dSr�)	�list�	__bases__�reverse�__methodDict�__dict__�items�type�types�FunctionType)r��_dictZbaseListZ_superr�r�r�r�r�r�!s
r�cCsi}t||�|��Sr�)r��keys)r�r�r�r�r��	__methods+s
r�zTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)r�cCs�i}t||�i}t|�}|��D]B}|dd�dksd|dd�dksd||vsd||vrXq"||||<q"|��D]D\}}	||	d�}
t|t�r�t||d�}t||
�t|||
|�qndS)Nr��_���)�method�func)r�Z	attribute)	r�r�r�r�r��str�__stringBody�exec�setattr)Z	fromClassZtoClassZtoPartZexcludeZ_dict_1r�Zmfc�exr�r��dZ
execStringr�r�r��__forwardmethods5s
0

�
r�c@s`eZdZddd�Zddd�Zd	d
�Zdd�Zd
d�Zdd�Zdd�Z	dd�Z
dd�Zdd�ZdS)r���^�Xc
Cs0tjj||||d�|��|_|||_|_|||_|_d|_	tj
||||j	tjdd�|_tj
||jjtjd�|_tj
||jjd�|_|jj|jj|jjd�|jdd	dd
�|jdd	dd
�|jjd	|d	ddd	d	dd�|jjd	|d	dd	d	d	dd�|jjd	|d	d	dd	d	dd�|��|j�d
|j�dS)N)rzr��whiter�)rzr��bgZreliefZborderwidth)�commandZorient)r�)ZxscrollcommandZyscrollcommandrr�)ZweightZminsize�news�ZpadxZin_Zpady�row�columnZrowspanZ
columnspanZstickyz<Configure>)�TK�Frame�__init__�winfo_toplevelZ_rootwindowrzr�r�r�r��CanvasZSUNKEN�_canvasZ	ScrollbarZxviewZ
HORIZONTAL�hscrollZyview�vscrollZ	configure�setZrowconfigureZcolumnconfigure�gridr`�bind�onResize)r��masterrzr�r�r�r�r�r�r�Ps8


������zScrolledCanvas.__init__NcCs�|r
||_|r||_|r||_|jj||jd|jd|jd|jdfd�|j�d|j|jd|j�|j�d|j|jd|j�|�	�dS)Nr�)r��scrollregionr��)
r�r�r�r�config�xview_movetorz�yview_movetor��
adjustScrolls�r�r�r�r�r�r�r�r`is$����zScrolledCanvas.resetc
Cs�|j��}|j��}|j�d|j||j�|j�d|j||j�||jks`||jkr�|jjd|ddddddd�|j	jd|ddddddd�n|j�
�|j	�
�dS)Nr�r�rr�r�)r�winfo_width�winfo_heightrr�rr�rrrZgrid_forget)r��cwidth�cheightr�r�r�r
{s

��
zScrolledCanvas.adjustScrollscCs|��dSr�)r
)r��eventr�r�r�r�szScrolledCanvas.onResizecGs|jj|�Sr�)r�bbox�r��argsr�r�r�r�szScrolledCanvas.bboxcOs|jj|i|��Sr�)r�cget�r�r�kwargsr�r�r�r�szScrolledCanvas.cgetcOs|jj|i|��dSr�)rr
rr�r�r�r
�szScrolledCanvas.configcOs|jj|i|��dSr�)rrrr�r�r�r�szScrolledCanvas.bindcOs|jj|i|��dSr�)r�unbindrr�r�r�r�szScrolledCanvas.unbindcCs|j��dSr�)r�focus_forcer�r�r�r�r�szScrolledCanvas.focus_force)r�r�r�r�)NNN)
r�r�r�r�r`r
rrrr
rrrr�r�r�r�rJs�

rrc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�_RootcCstj�|�dSr�)r��Tkr�r�r�r�r�r��sz_Root.__init__cCs&t|||||�|_|jjddd�dS)Nr�Zboth)�expand�fill)rr�pack)r�rzr�rrr�r�r��setupcanvas�sz_Root.setupcanvascCs|jSr�)rr�r�r�r��
_getcanvas�sz_Root._getcanvascCs|�d||||f�dS)Nz%dx%d%+d%+d)Zgeometry)r�rzr��startx�startyr�r�r��set_geometry�sz_Root.set_geometrycCs|�d|�dS)NZWM_DELETE_WINDOW)Zwm_protocol)r��destroyr�r�r��	ondestroy�sz_Root.ondestroycCs|��Sr�)Zwinfo_screenwidthr�r�r�r��	win_width�sz_Root.win_widthcCs|��Sr�)Zwinfo_screenheightr�r�r�r��
win_height�sz_Root.win_heightN)
r�r�r�r�r!r"r%r'r(r)r�r�r�r�r�src@s(eZdZdd�Zdd�Zdd�Zdd�ZdFdd�Zd
d�ZdGdd�Z	dd�Z
dd�Zdd�Zdd�Z
dHdd�Zdd�ZdIdd�ZdJd d!�ZdKd"d#�ZdLd$d%�Zd&d'�ZdMd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�ZdNd<d=�Zd>d?�Z d@dA�Z!dBdC�Z"dOdDdE�Z#d	S)P�TurtleScreenBasecCstjdd|jd�}|��|S)Nr�)rzr�r)r��
PhotoImage�cv�blank)r�Zimgr�r�r��_blankimage�szTurtleScreenBase._blankimagecCstj||jd�S)N)�filer)r�r+r,)r�r�r�r�r��_image�szTurtleScreenBase._imagecCs�||_t|t�r"|jj}|jj}nJt|j�d��}t|j�d��}|jj|d|d|d|dfd�||_||_d|_|_	dS)Nrzr�r��rr�)
r,r�rr�r�r�rr
�xscale�yscale)r�r,�w�hr�r�r�r��s

*zTurtleScreenBase.__init__cCs|jjdddd�S)N)rrrrrrr��r�outline)r,Zcreate_polygonr�r�r�r��_createpoly�szTurtleScreenBase._createpolyNFc
Cs�g}|D]*\}}	|�||j�|�|	|j�q|jj|g|�R�|dur`|jj||d�|durx|jj||d�|dur�|jj||d�|r�|j�|�dS)N�r)r7�rz��appendr2r3r,�coordsZ
itemconfigureZ	tag_raise)
r�Zpolyitem�	coordlistrr7rz�top�clr�r�r�r�r��	_drawpoly�szTurtleScreenBase._drawpolyc	Cs|jjddddddtjd�S)Nrr�r�)rrzZcapstyle)r,Zcreate_liner�ZROUNDr�r�r�r��_createlines�zTurtleScreenBase._createlinec	Cs�|durPg}|D]*\}}|�||j�|�||j�q|jj|g|�R�|durh|jj||d�|dur�|jj||d�|r�|j�|�dS)Nr9r:r;)	r�Zlineitemr>rrzr?r@r�r�r�r�r��	_drawlines
zTurtleScreenBase._drawlinecCs|j�|�dSr�)r,�delete�r��itemr�r�r��_delete(szTurtleScreenBase._deletecCs|j��dSr�)r,r,r�r�r�r��_update.szTurtleScreenBase._updatecCs|j�|�dSr�)r,�after�r�rr�r�r��_delay3szTurtleScreenBase._delaycCs2z|j�|�}d}Wntjy,d}Yn0|S)NTF)r,Z	winfo_rgbr�ZTclError)r�r9Zrgb�okr�r�r��_iscolorstring7s
zTurtleScreenBase._iscolorstringcCs0|dur |jj|d�|��n|j�d�SdS)N)r�r�)r,r
rHr)r�r9r�r�r��_bgcolorAs
zTurtleScreenBase._bgcolorcCst|\}}||j}||j}dddd�}|jj|d||||||d�}	|j�|	�\}
}}}
|j��|	|dfS)N�swr�Zse)rP�centerr_r�)�text�anchorr�font)r2r3r,Zcreate_textrr,)r�r[�txt�alignrSrWr�r�rRrFZx0Zy0Zx1Zy1r�r�r��_writeJs

�
zTurtleScreenBase._writer�csD�dur�j�|d|�n$��fdd�}�j�|d|||�dS)N�<Button-%s>cs:�j�|j��j�j�|j��j}}�||�dSr��r,�canvasxr�r2�canvasyr�r3�rr�r���funr�r�r��eventfunes�z+TurtleScreenBase._onclick.<locals>.eventfun�r,Z
tag_unbindZtag_bind�r�rFr]�num�addr^r�r\r��_onclick\szTurtleScreenBase._onclickcsD�dur�j�|d|�n$��fdd�}�j�|d|||�dS)Nz<Button%s-ButtonRelease>cs:�j�|j��j�j�|j��j}}�||�dSr�rXr[r\r�r�r^ws�z-TurtleScreenBase._onrelease.<locals>.eventfunr_r`r�r\r��
_onreleaseks	�zTurtleScreenBase._onreleasecsD�dur�j�|d|�n$��fdd�}�j�|d|||�dS)Nz<Button%s-Motion>csRz:�j�|j��j�j�|j��j}}�||�WntyLYn0dSr�)r,rYr�r2rZr�r3r�r[r\r�r�r^�s�z*TurtleScreenBase._ondrag.<locals>.eventfunr_r`r�r\r��_ondrag~s	zTurtleScreenBase._ondragcs@�dur�j�d|�n"��fdd�}�j�d|||�dS)NrWcs:�j�|j��j�j�|j��j}}�||�dSr�rXr[r\r�r�r^�s�z1TurtleScreenBase._onscreenclick.<locals>.eventfun�r,rr)r�r]rarbr^r�r\r��_onscreenclick�s	zTurtleScreenBase._onscreenclickcs>�dur|j�d|d�n�fdd�}|j�d||�dS)Nz<KeyRelease-%s>cs
��dSr�r��r�r]r�r�r^�sz0TurtleScreenBase._onkeyrelease.<locals>.eventfunrf�r�r]r�r^r�rir��
_onkeyrelease�szTurtleScreenBase._onkeyreleasecsn�dur4|dur |j�dd�qj|j�d|d�n6�fdd�}|durX|j�d|�n|j�d||�dS)Nz
<KeyPress>z
<KeyPress-%s>cs
��dSr�r�rhrir�r�r^�sz.TurtleScreenBase._onkeypress.<locals>.eventfunrfrjr�rir��_onkeypress�szTurtleScreenBase._onkeypresscCs|j��dSr�)r,rr�r�r�r��_listen�szTurtleScreenBase._listencCs(|dkr|j�|�n|j�||�dS�Nr)r,Z
after_idlerI�r�r]�tr�r�r��_ontimer�szTurtleScreenBase._ontimercCs|jjdd|d�S)Nr��image)r,Zcreate_image)r�rsr�r�r��_createimage�szTurtleScreenBase._createimagecCs<|\}}|j�|||j||jf�|jj||d�dS�Nrr)r,r=r2r3�
itemconfig)r�rFr[rsr�r�r�r�r��
_drawimage�s zTurtleScreenBase._drawimagecCs |jj||d�|j�|�dSru)r,rvZ	tag_lower)r�rFrsr�r�r��	_setbgpic�szTurtleScreenBase._setbgpiccCs|j�|�Sr�)r,r�rEr�r�r��_type�szTurtleScreenBase._typecs.|j�|���fdd�tdt��d�D�}|S)Ncs"g|]}�|�|df�qS)r�r���.0�i�r@r�r��
<listcomp>��z/TurtleScreenBase._pointlist.<locals>.<listcomp>rr�)r,r=�range�len)r�rF�plr�r}r��
_pointlist�szTurtleScreenBase._pointlistcCs|jj||||fd�dS)Nr1)r,r
)r��srx1�sry1�srx2�sry2r�r�r��_setscrollregion�sz!TurtleScreenBase._setscrollregionc	Cs~|j��}|D]j}t|j�|��}g}|rd|dd�\}}|�||�|�||�|dd�}q&|jj|g|�R�qdS�Nr�)r,Zfind_allr�r=r<)	r�ZxscalefactorZyscalefactorr�rFZcoordinatesZnewcoordlistr�r�r�r�r��_rescale�s
zTurtleScreenBase._rescalecCszt|jt�s|j|jfS||ur6|ur6durJnn|jj|jjfS|durX||_|durf||_|j�|||�dSr�)r�r,rr�r�r`rr�r�r��_resizes"zTurtleScreenBase._resizecCs@|j��}|dkr|jd}|j��}|dkr8|jd}||fS)Nr�rzr�)r,rr)r�rzr�r�r�r��_window_sizes



zTurtleScreenBase._window_sizecCs|jj��dSr�)r,Ztkrr�r�r�r�rs
zTurtleScreenBase.mainloopcCstj|||jd�S)N)�parent)rZ	askstringr,)r�r)�promptr�r�r�r(.s
zTurtleScreenBase.textinputcCstj||||||jd�S)N)ZinitialvalueZminvalue�maxvaluer�)rZaskfloatr,)r�r)r��defaultZminvalZmaxvalr�r�r�r=s
�zTurtleScreenBase.numinput)NNNF)NNNF)N)r�N)r�N)r�N)r�N)N)NNN)NNN)$r�r�r�r.r0r�r8rArBrCrGrHrKrMrNrVrcrdrergrkrlrmrqrtrwrxryr�r�r�r�r�rr(rr�r�r�r�r*�sJ
�
�


	





r*c@seZdZdS)r�N�r�r�r�r�r�r�r�r�Ysc@seZdZdS)�TurtleGraphicsErrorNr�r�r�r�r�r�bsr�c@s eZdZddd�Zddd�ZdS)rNcCsz||_|dkr"t|t�rpt|�}nN|dkrVt|t�rp|���d�rpt|�rpt�	|�}n|dkrdg}nt
d|��||_dS)N�polygonrs�.gif�compoundzThere is no shape type %s)ryr�r�r�r��lower�endswithrrr0r��_data)r��type_�datar�r�r�r�ns


zShape.__init__cCs:|jdkrtd|j��|dur$|}|j�|||g�dS)Nr�z Cannot add component to %s Shape)ryr�r�r<)r��polyrr7r�r�r��addcomponent~s
�zShape.addcomponent)N)N)r�r�r�r�r�r�r�r�r�rgs
rc@s@eZdZddd�Zddd�Zdd�Zd	d
�Zdd�Zd
d�ZdS)�Tbufferr�cCs$||_dgg||_d|_d|_dS)Nr�F)�bufsize�buffer�ptr�cumulate)r�r�r�r�r�r��szTbuffer.__init__NcCsD|dur&t|j�D]}dg|j|<qn||_dgg||_d|_dS)Nr�)r�r�r�r�)r�r�r|r�r�r�r`�sz
Tbuffer.resetcCsF|jdkrB|js0|jd|j|_||j|j<n|j|j�|�dSr�)r�r�r�r�r<rEr�r�r��push�s

zTbuffer.pushcCsJ|jdkrF|j|j}|dur"dSdg|j|j<|jd|j|_|SdSr�)r�r�r�rEr�r�r��pop�s
zTbuffer.popcCs|j|j�dg�Sr�)r�r��countr�r�r�r��nr_of_items�szTbuffer.nr_of_itemscCst|j�dt|j�S)N� )r�r�r�r�r�r�r�r��szTbuffer.__repr__)r�)N)	r�r�r�r�r`r�r�r�r�r�r�r�r�r��s

	r�c@seZdZdZedededfdd�Zdd�Zd<d
d�Zdd
�Zd=dd�Z	dd�Z
dd�Zd>dd�Zdd�Z
dd�Zdd�Zd?dd�Zd@dd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�ZdAd-d.�Zd/d0�ZdBd1d2�ZdCd3d4�ZdDd6d7�ZdEd8d9�ZdFd:d;�ZeZe
Z eZ!e	Z"eZ#d	S)GrTrrrc
Cs�t�||�tdd�tdd�tdd�tdd�tdd�tdd�td|���d	�|_d
di|_||_||_td|_	g|_
|��tj
d
kr�|��}|�ddddd�|�ddddd�dS)Nr�)����r�r�r�rr�))r�)����)r�r�)����)����	)����)����)r�r�)������)���r�)r�r�)r�r��rr�)�r�)�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r�r�)r�)��Q�#@���Q�@)�G�z. @��Q��@)r�r�)r�r�r�)���Q��r�)��Q���r�)�G�z. �r�)��Q�#�r�r�)r�r�)r�r�)r�r�)r�r�)g�g$�)r�r�)r�r�)r�r�)r�r�))r�r�)r�r�)r�r�)r�r�))r���G�z�)rg�����'@)r�r�)�rr)r�r�r�)r�r�rs)Zarrowr�r4ZsquareZtriangler�r-�nopicr�r�darwinZwmZ
attributesr�z-topmost�1�0)r*r�rr.�_shapes�_bgpics�_mode�_delayvaluer��
_colormode�_keysr5�sys�platformr��call)r�r,rrrZ
rootwindowr�r�r�r��s&�


zTurtleScreen.__init__cCs�td|_td|_|�d�|�d�|_d|_d|_d|_g|_	|�
d�d	D]}|�d|�qP|�d�|j
dd�D]}|�d|�|�d|�qzdt_dS)
Nrr�allr�r�r�rr�)r�r��)r�r�r�rGrt�_bgpic�
_bgpicname�_tracing�_updatecounter�_turtlesrrRrr�rr�_pen)r��btnr�r�r�r�r5�s 




zTurtleScreen.clearNcCs||dur|jS|��}|dvr*td|��||_|dvrp|�|jd|jd|jd|jd�d|_|_|��dS)N�r��logo�worldzNo turtle-graphics-mode %s)r�r�r�r�)	r�r�r�r�r�r�r2r3r`�r�rr�r�r�rs�zTurtleScreen.modecCs�|��dkr|�d�t||�}t||�}|��\}}|�|d|d�|j|j}	}
|j||_|j||_||j}||j}|j|}
|j|}|�|||
|�|�	|j|	|j|
�|�
�dS)Nr��)rr�r�r%r2r3r�r�r�r�r,)r�ZllxZllyZurxZuryZxspanZyspanZwxZwyZ	oldxscaleZ	oldyscaler�r�r�r�r�r�r�r'-s 



z TurtleScreen.setworldcoordinatescCsT|dur2|���d�r(td|�|��}qFtd��nt|t�rFtd|�}||j|<dS)Nr�rsz;Bad arguments for register_shape.
Use  help(register_shape)r�)r�r�rr0r�r�r�r�)r��namerkr�r�r�r#Ts


zTurtleScreen.register_shapec	Cst|�dkr|d}t|t�rD|�|�s0|dkr4|Stdt|���z|\}}}Wn&ttfyxtdt|���Yn0|jdkr�dd�|||fD�\}}}d|kr�d	kr�nn.d|kr�d	kr�nnd|kr�d	ks�ntd
t|���d|||fS)Nr�rr�zbad color string: %s�bad color arguments: %sr�cSsg|]}td|��qS�g�o@��round�r{r�r�r�r�r~�rz*TurtleScreen._colorstr.<locals>.<listcomp>��bad color sequence: %s�
#%02x%02x%02x)r�r�r�rMr��	TypeErrorr�r�)r�r9r��g�br�r�r��	_colorstrws


FzTurtleScreen._colorstrcsx��d�s�St��dkr.�fdd�dD�}n4t��dkrV�fdd��dd�D�}ntd	���t�fd
d�|D��S)Nr�r�cs"g|]}t�||d�d��qS)r�r��r�rz��cstrr�r�r~�rz'TurtleScreen._color.<locals>.<listcomp>)r�r�r�r�csg|]}dt�|d��qS)r�r�)r{r5r�r�r�r~�rr�zbad colorstring: %sc3s|]}|�jdVqdS)r�N)r�)r{r�r�r�r��	<genexpr>�rz&TurtleScreen._color.<locals>.<genexpr>)r�r�r�r�)r�r�r@r�)r�r�r��_color�s
zTurtleScreen._colorcCs8|dur|jS|dkr"t|�|_n|dkr4t|�|_dS)Nr�r�)r�r�r�)r�Zcmoder�r�r�r�szTurtleScreen.colormodecCs$|jD]}|�|j�|��qdSr�)r��_setmoder�r`)r�r�r�r�r�r`�s
zTurtleScreen.resetcCs|jSr�)r�r�r�r�r�r+�szTurtleScreen.turtlescGs4|r|�|�}nd}|�|�}|dur0|�|�}|Sr�)r�rNr��r�rr9r�r�r�r�s

zTurtleScreen.bgcolorcCsB|dur|jSt|�|_d|_|dur0t|�|_|jr>|��dSrn)r�r�r�r�r,)r��nrr�r�r�r*�s

zTurtleScreen.tracercCs|dur|jSt|�|_dSr�)r�r�rJr�r�r�r�szTurtleScreen.delaycCs<tjsdt_t�|jdkr8|jd7_|j|j;_dS)NTrr�)r�_RUNNINGr�r�r�r�r�r�r��
_incrementudc	s
zTurtleScreen._incrementudccCs<|j}d|_|��D]}|��|��q||_|��dS�NT)r�r+�_update_data�_drawturtlerH)r��tracingrpr�r�r�r,s
zTurtleScreen.updatecCs|��dSrn�r�r�r�r�r�r.szTurtleScreen.window_widthcCs|��dS�Nr�r�r�r�r�r�r-&szTurtleScreen.window_heightcCs|jSr�)r,r�r�r�r�r/s
zTurtleScreen.getcanvascCst|j���Sr�)�sortedr�r�r�r�r�r�r;s	zTurtleScreen.getshapesr�cCs|�|||�dSr�)rg�r�r]r�rbr�r�r�rRFszTurtleScreen.onclickcCsF|dur ||jvr6|j�|�n||jvr6|j�|�|�||�dSr�)r��remover<rk�r�r]r�r�r�r�rWs

zTurtleScreen.onkeycCsN|dur ||jvr>|j�|�n|dur>||jvr>|j�|�|�||�dSr�)r�rr<rlrr�r�r�rus
zTurtleScreen.onkeypresscCs|��dSr�)rm)r��xdummy�ydummyr�r�r�r�s
zTurtleScreen.listenrcCs|�||�dSr�)rqror�r�r�r"�szTurtleScreen.ontimercCsF|dur|jS||jvr(|�|�|j|<|�|j|j|�||_dSr�)r�r�r0rxr�)r�Zpicnamer�r�r�r�s
zTurtleScreen.bgpiccCs|�|||�Sr�)r�rr�r�r�r%�szTurtleScreen.screensize)N)N)N)NN)N)r�N)N)NN)r)N)NNN)$r�r�r�r�r�r�r5rr'r#r�r�rr`r+rr*rr�r,r.r-rrrRrrrr"rr%r!r$rrr r�r�r�r�r�sD�
(
"'
#
	

			

 



rc@sPeZdZedd�edd�edd�d�ZdZdZdZefdd�Zd	d
�Z	dAdd
�Z
dd�ZdBdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�ZdCd)d*�Zd+d,�Zd-d.�Zd/d0�ZdDd1d2�ZdEd3d4�Zd5d6�Zd7d8�ZdFd9d:�Z dGd;d<�Z!dHd=d>�Z"dId?d@�Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,dS)J�
TNavigatorr��)r�r�r�r�rr�cCsB|j|_|j|_||_d|_|��d|_|�|�t�	|�dSr�)
�DEFAULT_ANGLEOFFSET�_angleOffset�DEFAULT_ANGLEORIENT�_angleOrientr��
undobufferr:r�rr`r�r�r�r�r��s
zTNavigator.__init__cCstdd�|_tj|j|_dS)Nr)r�	_positionr�START_ORIENTATIONr��_orientr�r�r�r�r`�szTNavigator.resetNcCsL|dur|jS|dvrdS||_|dvr6d|_d|_n|jd|_d|_dS)Nr�)r�r�rr��@r�)r�rr	�_fullcircler�r�r�r�r�szTNavigator._setmodecCs0||_d||_|jdkr"d|_n
|d|_dS)Nihr�rr)r�
_degreesPerAUr�r�r�Z
fullcircler�r�r��_setDegreesPerAUs


zTNavigator._setDegreesPerAU��v@cCs|�|�dSr�)rrr�r�r�r:szTNavigator.degreescCs|�dtj�dSr�)rr�r�r�r�r�r�r^5szTNavigator.radianscCs|j|j|}|�|�dSr�)rr
�_goto)r�r;Zender�r�r��_goCszTNavigator._gocCs||j9}|j�|�|_dSr�)rr
r��r�r�r�r�r��_rotateHs
zTNavigator._rotatecCs
||_dSr��r)r��endr�r�r�rMszTNavigator._gotocCs|�|�dSr��r�r�r;r�r�r�rCQszTNavigator.forwardcCs|�|�dSr�rrr�r�r�r/hszTNavigator.backcCs|�|�dSr��rrr�r�r�r_|szTNavigator.rightcCs|�|�dSr�rrr�r�r�rP�szTNavigator.leftcCs|jSr�rr�r�r�r�r[�szTNavigator.poscCs
|jdSrnrr�r�r�r�r|�szTNavigator.xcorcCs
|jdSr�rr�r�r�r�r}�szTNavigator.ycorcCs,|dur|�t|��n|�t||��dSr�)rr)r�r�r�r�r�r�rI�szTNavigator.gotocCs|�dd�|�d�dSrn)rIrdr�r�r�r�rL�szTNavigator.homecCs|�t||jd��dSr��rrr)r�r�r�r�r�riszTNavigator.setxcCs|�t|jd|��dSrnr)r�r�r�r�r�rjszTNavigator.setycCsT|durt||�}t|t�r"|}n$t|t�r6t|�}nt|t�rF|j}t||j�Sr�)rr�r�rr�abs)r�r�r�r[r�r�r�r;%s




zTNavigator.distancecCs�|durt||�}t|t�r"|}n$t|t�r6t|�}nt|t�rF|j}||j\}}tt�||�dtjd�d}||j	}|j
|j||jS�Nr�r�r)
rr�r�rrr�r��atan2r�rrr	r)r�r�r�r[�resultr�r�r�ruEs




 
zTNavigator.towardscCsJ|j\}}tt�||�dtjd�d}||j}|j|j||jSr)	r
r�r�r r�rrr	r)r�r�r�r!r�r�r�rJhs

 
zTNavigator.headingcCs>||��|j}|j}||d||d}|�|�dS)N�@)rJr	rr)r�Zto_angler��fullr�r�r�rdwszTNavigator.setheadingcCsp|jr|j�dg�d|j_|��}|dur2|j}|durjt|�|j}dttdt|�dd�|�}d||}d|}d	|t�	|tj
d
|j�}|dkr�|||}}}|��}	|�
�}
|dkr�|�dd�n
|�d�|�|�t|�D].}|�|�|�|�|�d�|�|��q|�|�|dk�rR|�|	|
�|�|�|j�rld|j_dS)
N�seqTr��g@g�M@r�r�r"r�rF)r
r�r�rprrr��minr�r�r�r�_tracerrKrr�r)r��radiusZextent�stepsrpZfracr4Zw2�l�trZdlr|r�r�r�r4�s>""






zTNavigator.circlecCsdSr�r�)r�r�r�r�r�rp�szTNavigator.speedcCsdSr�r�)r��ar�r�r�r�r'�szTNavigator._tracercCsdSr�r�)r�r�r�r�r�rK�szTNavigator._delay)N)r)N)N)N)NN)r)NN)N)-r�r�r�rrZDEFAULT_MODErrr�r`r�rr:r^rrrrCr/r_rPr[r|r}rIrLrirjr;rurJrdr4rpr'rKr@r3r0rbrQr\rerfrcr�r�r�r�r�sX�

	


#
 
#
A


rc@s�eZdZedfdd�Zededfdd�Zd-d	d
�Zd.dd�Zd
d�Zdd�Z	dd�Z
d/dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd0d!d"�Zd1d$d%�Zd2d'd(�Zd)d*�Zd+d,�ZeZeZeZe	Ze	ZeZeZdS)3�TPenracCs||_d|_t�|�dSr�)�_resizemoder
r-�_reset)r�rar�r�r�r��sz
TPen.__init__rWrAcCsFd|_d|_||_||_d|_d|_d|_d|_d|_d|_	d|_
dS)Nr�Tr�)r�r�r)r�rrr�)�_pensize�_shown�	_pencolor�
_fillcolor�_drawing�_speed�_stretchfactor�_shearfactor�_tilt�_shapetrafo�
_outlinewidth)r�rWrAr�r�r�r/�szTPen._resetNcCs.|dur|jS|��}|dvr*|j|d�dS)N)�auto�userr��ra)r.r�rV)r�Zrmoder�r�r�ra�s
zTPen.resizemodecCs|dur|jS|j|d�dS)N)rY)r0rV)r�rzr�r�r�rYszTPen.pensizecCs|js
dS|jdd�dS)NF�rX�r4rVr�r�r�r�rZ0s
z
TPen.penupcCs|jr
dS|jdd�dS)NTr>r?r�r�r�r�rX>s
zTPen.pendowncCs|jSr�)r4r�r�r�r�rNLs
zTPen.isdowncCsjdddddd�}|dur|jS||vr0||}n*d|krDdkrVnntt|��}nd}|j|d	�dS)
Nrr�r�r�r�)Zfastest�fast�normalZslowZslowestr�g%@)rp)r5r�r�rV)r�rpZspeedsr�r�r�rp[s
z
TPen.speedcGs�|rht|�}|dkr"|d}}n"|dkr4|\}}n|dkrD|}}|�|�}|�|�}|j||d�n|�|j�|�|j�fSdS)Nr�rr�r�)rWrA)r�r�rVr�r2r3)r�rr*ZpcolorZfcolorr�r�r�r9�s 


z
TPen.colorcGs:|r*|�|�}||jkrdS|j|d�n|�|j�SdS)N)rW)r�r2rVr�r�r�r�r�rW�s

z
TPen.pencolorcGs:|r*|�|�}||jkrdS|j|d�n|�|j�SdS)N)rA)r�r3rVr�r�r�r�r�rA�s

zTPen.fillcolorcCs|jdd�dS)NT��shown�rVr�r�r�r�ro�szTPen.showturtlecCs|jdd�dS)NFrBrDr�r�r�r�rK	szTPen.hideturtlecCs|jSr�)r1r�r�r�r�rO	s
zTPen.isvisiblecKs�|j|j|j|j|j|j|j|j|j|j	|j
d�}|s>|s>|St|t�rN|}ni}|�
|�i}|D]}||||<qd|jr�|j�d|f�d}d|vr�|j|dkr�d}d|vr�t|dt�r�|�|df�|d<|j|dkr�d}d|v�r|j|dk�rd}|�r|��d|v�r&|d|_d|v�r:|d|_d|v�rN|d|_d|v�r�t|dt��r||�|df�|d<|d|_d	|v�r�|d	|_d
|v�r�|d
|_d|v�r�|d}t|ttf��r�||f}||_d|v�r�|d|_d
|v�r|d
|_	d|v�r|d|_d|v�r.|d|_
d|v�sLd|v�sLd|v�r�|j\}	}
|j}t�|j
�t�|j
�}}
|	|
|
||
||	||
|
||f|_|��dS)N)rCrXrWrArYrpra�
stretchfactorrnr7rsrVFrXTrWrYrArprarErnr7rCrs)r1r4r2r3r0r5r.r6r7r:r8r��dictr,r
r�r�r��_newLiner�r�r�r�r�r9rH)r�rVZpendictZ_pd�pZ_p_bufr�ZnewLineZsfZscxZscyZshf�sa�car�r�r�rV!	s�/�

























�zTPen.penTcCsdSr�r��r�ZusePosr�r�r�rG�	sz
TPen._newLineFcCsdSr�r�)r�r�Zforcedr�r�r�rH�	szTPen._updatecCsdSr�r�rr�r�r�r��	szTPen._colorcCsdSr�r�rr�r�r�r��	szTPen._colorstr)N)N)N)N)T)TF)r�r�r�r�r�r/rarYrZrXrNrpr9rWrArorKrOrVrGrHr�r�rzryr]rUr=rqrMr�r�r�r�r-�s8�



&.%$



r-c@seZdZdd�Zdd�ZdS)�_TurtleImagecCs||_d|_|�|�dSr�)r�ry�	_setshape)r�r��
shapeIndexr�r�r�r��	sz_TurtleImage.__init__cs�|j�||_|jdkr*�j|jkr2nndS|jdkrP�j|jkrXnndS|jdvrp��|j�n |jdkr�|jD]}��|�q��j|j|_|jdkr����|_nF|jdkrԈ��jdj�|_n&|jdkr��fdd��j|jD�|_dS)Nr�rs)rsr�r�r-csg|]}����qSr��r8�r{rF�r�r�r�r~�	rz*_TurtleImage._setshape.<locals>.<listcomp>)	r�rNryr�rG�_itemr8rtr�)r�rNrFr�rQr�rM�	s(""







�z_TurtleImage._setshapeN)r�r�r�r�rMr�r�r�r�rL�	srLc@s�eZdZgZdedededfdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdldd�Z
dd�Zdd�Zdd�Zdd�Zdmdd �Zdnd!d"�Zdod#d$�Zd%d&�Zdpd'd(�Zd)d*�Zdqd+d,�Zd-d.�Zd/d0�Zdrd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zdsd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dtdEdF�Z$dGdH�Z%dIdJ�Z&dKdL�Z'dudMdN�Z(dOdP�Z)dvdSdT�Z*dUdV�Z+dWdX�Z,dYdZ�Z-d[d\�Z.d]d^�Z/e/Z0dwd_d`�Z1dxdbdc�Z2dyddde�Z3dzdfdg�Z4dhdi�Z5djdk�Z6eZ7dS){r
Nrkr�r�cCs4t|t�r||_n|t|t�r:|tjvr2tj�|�||_nTt|ttf�r�tjD]}|j	|krN||_q�qNt|�|_tj�|j�nt
d|��|j}t�||�
��t�|�|j�|�|��|_t||�|_d|_d|_d|_|_||_d|_|��|_|jg|_|jg|_g|_||_t |�|_!|�"�dS)Nzbad canvas argument %sF)#r��_Screenr�rr
�screensr<rr�r,r�rr�rr-r�rB�drawingLineItemrLr��_poly�
_creatingPoly�	_fillitem�	_fillpathr1�_hidden_from_screen�currentLineItemr�currentLiner��
stampItems�_undobuffersizer�r
rH)r�Zcanvasrkr�r�r�r�r�r�r��	s@











zRawTurtle.__init__cCs0t�|�t�|�|��|��|��dSr�)rr`r-r/�_clearr�rHr�r�r�r�r`
s


zRawTurtle.resetcCs&|dus|dkrd|_n
t|�|_dSrn)r
r�)r��sizer�r�r�rh
szRawTurtle.setundobuffercCs|jdurdS|j��Srn)r
r�r�r�r�r�rx,
s	
zRawTurtle.undobufferentriescCsld|_|_|jD]}|j�|�q|j��|_g|_|jrJ|j�	|j
�|jg|_|��|�|j
�dSr�)rXrYr�r�rGrBr[r\r4r<rr7rhr^rEr�r�r�r_9
s

zRawTurtle._clearcCs|��|��dSr�)r_rHr�r�r�r�r5G
szRawTurtle.clearcCsF|j��|jjdkrdSt|j�dkrB|j�|j|j|j|j�dSr�)	r�r�r�r�r\rCr[r2r0r�r�r�r�r�V
s
�zRawTurtle._update_datacCsx|j}|jdkrdS|jdkrD|��|��|��|�|j�n0|��|jdkrt|��D]}|��q^|��dSr�)	r�r�r�r�rHrKr�r�r+)r�r�rpr�r�r�rH^
s



zRawTurtle._updatecCs|j�||�Sr�)r�r*)r��flagrr�r�r�r'p
szRawTurtle._tracercCs|j�|�Sr�)r�r�rr�r�r�r��
szRawTurtle._colorcCs|j�|�Sr�)r�r�rr�r�r�r��
szRawTurtle._colorstrc	Cs�t|t�r|Sz|\}}}Wn&ttfyBtdt|���Yn0|jjdkrjdd�|||fD�\}}}d|kr~dkr�nn.d|kr�dkr�nnd|kr�dks�ntdt|���d|||fS)	Nr�r�cSsg|]}td|��qSr�r�r�r�r�r�r~�
rz!RawTurtle._cc.<locals>.<listcomp>rr�r�r�)r�r�r�r�r�r�r�)r�rr�r�r�r�r�r��_cc�
s
Fz
RawTurtle._cccs�|j�|�|j�|j}d|_d|_t|�}�|_||_�|_t�|jj�|_�j�|��j	|jjj
}|dkr����|j_nJ|dkr���
�j	dj�|j_n*|dkrʇfdd��j	|jjjD�|j_���|_|��|S)Nr�rsr-r�csg|]}����qSr�rOrPrQr�r�r~�
rz#RawTurtle.clone.<locals>.<listcomp>)r�rGr4r�rrLrNr�r<r�ryr8rRrtr�rBr[rH)r�r��q�ttyper�rQr�r8�
s.
�

zRawTurtle.clonecCsB|dur|jjS||j��vr*td|��|j�|�|��dS)NzThere is no shape named %s)r�rNr�rr�rMrH)r�r�r�r�r�rk�
szRawTurtle.shapecCs�||ur|urdur8nn|j\}}|||jfS|dksH|dkrPtd��|durt|durj||f}q�||f}n|dur�|jd|f}n|j}|dur�|j}|jd||d�dS)Nrz(stretch_wid/stretch_len must not be zeror<)rarEr7)r6r:r�rV)r�Zstretch_widZstretch_lenr7rEr�r�r�rl�
s""


�zRawTurtle.shapesizecCs |dur|jS|jd|d�dS)Nr<)rarn)r7rV)r�Zshearr�r�r�rnszRawTurtle.shearfactorcCs<||j|j}|tjddtj}|jd|d�dS)Nr�r�r<)rars)rr	r�r�rV�r�r�rsr�r�r�rgszRawTurtle.settiltanglecCs>|dur0|jdtj|j}||j|jS|�|�dS)Nr�)r8r�r�r	rrrgrer�r�r�rt4szRawTurtle.tiltanglecCs|�||���dSr�)rgrtrr�r�r�rsNszRawTurtle.tiltcCs6||ur(|ur(|ur(dur2nn|jS|j\}}}}|durL|}|durX|}|durd|}|durp|}||||dkr�td��||||f|_t�||�dtj}	t�|	�t�|	�}
}|||
||||
||
||||
|||f\}}
}}||f|_|
||_|	|_	|j
dd�dS)Nrz0Bad shape transform matrix: must not be singularr�r<r=)r9r�r�r r�r�r�r6r7r8rV)r��t11�t12�t21�t22Zm11Zm12Zm21Zm22ZalfarIrJZa11Za12Za21Za22r�r�r�rmas&,�

zRawTurtle.shapetransformcs^|j�|j\��|j\��t���j�j�}dt|�|\�������fdd�|D�S)Nr�csFg|]>\}}��|�|�j��|�|�jf�qSr�)r2r3�r{r�r��Ze0�e1Zp0Zp1r�r�r�r~�s�z(RawTurtle._polytrafo.<locals>.<listcomp>)r�rr
rr3r2r)r�r��er�rkr��
_polytrafo�s

�zRawTurtle._polytrafocCs2|jj|jj}|jdkr.|�|j|jdk�SdS)Nr�r�)r�r�r�rNry�
_getshapepolyr�)r�rkr�r�r�rG�s
zRawTurtle.get_shapepolyFcsx|jdks|r|j\����n>|jdkrNtd|jd�}|dd|f\����n|jdkr\|St����fdd�|D��S)	Nr<r;r�g@rr�c3s2|]*\}}�|�|�|�|fVqdSr�r�rj�rfrgrhrir�r�r��rz*RawTurtle._getshapepoly.<locals>.<genexpr>)r.r9�maxr0r�)r�r�r�r*r�rpr�ro�s

zRawTurtle._getshapepolyc	Cs�|j}|j|jj}|j}|jj}|j�r*|jdk�r*|jdk�r*d|_	|j
}|dkr�|jdkrfd}n|jdkrx|j}n|j
}|�|�|��}|j|j}}|j|||||dd�nt|d	kr�|�||j|�nZ|d
k�r�t||�D]D\}	\}
}}|�|�|
d��}
|j|	|
|�|�|�|�|j
dd�q�nx|j	�r6dS|dk�rR|�|ddd�nJ|d	k�rv|�||j|jd
j
�n&|d
k�r�|D]}	|�|	ddd��q�d|_	dS)NrFr�r�r�r;T�rr7rzr?rsr��r�r�r�r�r-)r�r�r�rNryrRr1r�r�rZr�r.r0r:rnror3r2rArwr�ziprb)r�r�rkrdZtitem�tshaper4�fc�ocrFr�r�r�r�r��sH �
�




�
zRawTurtle._drawturtlec	CsT|j}|j|jj}|j}|j}|dkr�|��}|jdkr@d}n|jdkrR|j}n|j	}|�
|�|��}|j|j
}}|j|||||dd�n�|dkr�|�d�}|�||j|�n�|d	k�r4g}|D]}	|��}
|�|
�q�t|�}t||�D]D\}
\}}}|�
|�|d��}|j|
||�|�|�|�|j	dd�q�|j�|�|j�d
|f�|S)Nr�r�r�r;Trrrsr�r�rr)r�r�r�rNryr�r8r.r0r:rnror3r2rArtrwrr<r�rtrbr]r
r�)r�r�rkrdru�stitemr4rvrw�elementrFr�r�r�r�rr�s>�

�zRawTurtle.stampcCs�||jvrDt|t�r,|D]}|j�|�qn|j�|�|j�|�d|f}|j}||jvr`dS|j�|�}|j�|�||j	kr�|j	d|j
|_	|j�|j	d|j
dg�dS)Nrrr�)r]r�r�r�rGrr
r��indexr�r��insert)r��stampidZsubitemrF�bufrzr�r�r��_clearstamps



zRawTurtle._clearstampcCs|�|�|��dSr�)r~rH)r�r|r�r�r�r6s
zRawTurtle.clearstampcCs^|dur|jdd�}n&|dkr0|jd|�}n|j|d�}|D]}|�|�qB|��dSrn)r]r~rH)r�r�ZtoDeleterFr�r�r�r7-szRawTurtle.clearstampsc
Cs�|j|j|jt|jt�f}|j}d|j|||j|j	dd�|�
|j�|jdd�ff}|jrh|j�
|�|j}|j�rZ|jdk�rZ||}|d|jd|d|jd}dt|ddd|j|j�}|d|}	td|�D]R}
|
dkr�d	}nd
}||	|
|_|j�r2|�|j||jf|j|j|�|��q�|j�rZ|j|jdd|jd
�|j�rn|j	�|�t|jt��r�|j�|�||_|j�r�|j�|�t|j	�dk�r�|��|��dS)N�gor�rr�r�r�皙�����?r�TF�r�r�r��rrz�*)r4r2r0r�rYr�r�rr[r\r�r�r
r�r5r�r2r3r�r�rCrUrHr<rWrVr�rG)r�r�go_modesr�Z
undo_entry�start�diff�diffsq�nhops�deltar�r?r�r�r�rIs\
�

��$$
�

�zRawTurtle._gotocs|\}}}}|\}}}}	|\}
}}�|j�t|j|�dkrDtd�|
|_||_|ddgkrbd}
n|}
�j|
||
|d���fdd�|jD�}|D]}��|�|j�	|�q�|}|j
�r��jdk�r�||}|d	�jd
|d�j
d
}dt|ddd|j
|j
�}|d
|}td|�D]P}|dk�r@d}nd}||||_|�rr��|j||jf|||�|���q,|�r��j|jdd|d�||_|j�r�t|j�d	k�r�|j��|jgk�r�d|_d|_|	�r|jgk�r�d|_td�n|jdu�r|j��|��dS)Nr�z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!r�r�r�cs&g|]}|�vr��|�dkr|�qS)r�)ryrz�r�r�r�r�r~�s�z'RawTurtle._undogoto.<locals>.<listcomp>r�rr�r�r�r�TFr�zUnwahrscheinlich in _undogoto!)r�rrr�r[r\rCr�rGrr5r�r2r3r�r�rUrHrWr�rVr�rY)r��entry�old�newr�ZcoodataZdrawingZpcZpsrBZcLIZcLr�ZusepcZtodeleter|r�r�r�r�r�r�r?r�r�r��	_undogoto~sf
$$
�
�


zRawTurtle._undogotocCs�|jr|j�d||jf�||j9}|j�|�}|jj}|dkr�|jdkr�d|j}dtt	|�|�}d||}t
|�D]}|j�|�|_|��q|||_|��dS)N�rotr�rg@r�)r
r�rr
r�r�r�r5r�rr�rH)r�r�Z	neworientr�Zanglevelr)r�r�r�r�r�r�s


zRawTurtle._rotateTcCsnt|j�dkrD|j�|j|j|j|j�|j��|_|j�	|j�n|jj|jdd�g|_|rj|j
g|_dS)Nr�T)r?)r�r\r�rCr[r2r0rBr�r<rrKr�r�r�rG�s�zRawTurtle._newLinecCst|jt�Sr�)r�rYr�r�r�r�r�rB�szRawTurtle.fillingcCsX|��s"|j��|_|j�|j�|jg|_|��|j	rL|j	�
d|jf�|��dS)N�	beginfill)rBr�r8rXr�r<rrYrGr
r�rHr�r�r�r�r1�s
zRawTurtle.begin_fillcCs^|��rZt|j�dkrF|jj|j|j|jd�|jrF|j�d|jf�d|_|_|�	�dS)Nr�r9�dofill)
rBr�rYr�rArXr3r
r�rHr�r�r�r�r>
s�zRawTurtle.end_fillc	GsB|sNt|ttf�r0|�|�}|jt|jd�}qr|j}|sr|jt|jd�}n$|durh|jt|jd�}|�|�}t|jd�r�|j�	|j
||�}|j�|�|j
r�|j
�d|f�n�|��}|j
r�|j
�dg�d|j
_zH|��dkr�|��|��|�|�|�|�|�d�W|�|�n|�|�0|j
�r>d|j
_dS)	Nr��_dotr<r$Tr;rF)r�r�r�r�r0rqr2�hasattrr�r�rr�r<r
r�rVr�rarMrXrYrWrC)r�r`r9rFrVr�r�r�r<
s:



z
RawTurtle.dotcCsB|j�|j||||j�\}}|j�|�|jr>|j�d|f�|S)N�wri)r�rVrr2r�r<r
r�)r�rTrUrSrFrr�r�r�rVH
s�zRawTurtle._writerP��Arialr�rAcCs`|jr|j�dg�d|j_|�t|�|��|�}|rN|��\}}|�||�|jr\d|j_dS)Nr$TF)r
r�r�rVr�r�r[re)r��arg�moverUrSrr�r�r�r�r�r{R
szRawTurtle.writecCs|jg|_d|_dSr�)rrVrWr�r�r�r�r2o
s
zRawTurtle.begin_polycCs
d|_dS�NF)rWr�r�r�r�r?}
szRawTurtle.end_polycCs|jdurt|j�SdSr�)rVr�r�r�r�r�rD�
s

zRawTurtle.get_polycCs|jSr�rQr�r�r�r�rF�
szRawTurtle.getscreencCs|Sr�r�r�r�r�r�rH�
szRawTurtle.getturtlecCs|j�|�Sr�)r�rrJr�r�r�rK�
szRawTurtle._delayr�cCs"|j�|jj|||�|��dSr�)r�rcr�rRrHr�r�r�r�rR�
szRawTurtle.onclickcCs"|j�|jj|||�|��dSr�)r�rdr�rRrHr�r�r�r�rT�
szRawTurtle.onreleasecCs|j�|jj|||�dSr�)r�rer�rRr�r�r�r�rS�
szRawTurtle.ondragcCs,|jdurdS|dkr@|\}}|�|||j�|j��}n�|dkr\|d}|�|�n�|dkrp|�|�n�|dvr�|d}|j�|�|j�	|�n�|dkr�|d}|jj
|dddd	�nh|d
k�r|d}d|_|_||jv�r(|j�|�|j�	|�n$|dk�r(t
�||d�|j��dS)Nr�rrrr)r�r<r�rsr�r6r�rV)r
rrr�r6r�r�rGr�rrArXrYr-rV)r��actionr�r�ZdegPAU�dummyrxrFr�r�r��_undos:

�

zRawTurtle._undocCsl|jdurdS|j��}|d}|dd�}|dkr\|rh|��}|�|d|dd��q4n|�||�dS)Nrr�r$)r
r�r�)r�rFr�r�r�r�r�rw's

zRawTurtle.undo)NN)N)NNN)N)N)NNNN)F)N)T)N)FrPr�)N)r�N)r�N)r�N)8r�r�r�rTr�r�r`rhrxr_r5r�rHr'r�r�rbr8rkrlrnrgrtrsrmrnrGror�rrr~r6r7rr�rrGrBr1r>r<rVr{r2r?rDrFrHrErKrRrTrSr�rwrvr�r�r�r�r
�	sp�
(

(

(


(

(-
5A

0







 r
cCstjdurt�t_tjSr�)r�_screenrSr�r�r�r�r	Js
r	c@sfeZdZdZdZedZdd�Zededededfd	d
�Zdd�Z	d
d�Z
dd�Zdd�ZdS)rSNr)cCs�tjdur4t�t_|_|j�tj�|j�|j�tjdur�td}td}td}td}td}td}|j�	||||�|j�
�t_t�|tj�|�
||||�dS)Nrzr�r�r�r�r�)rS�_rootrr)�_titler'�_destroyrr�r!r"rr�r&)r�rzr�r�r�r�r�r�r�r�r�Xs

z_Screen.__init__rzr�r�r�cCs�t|jd�sdS|j��}|j��}t|t�rNd|krBdkrNnn||}|durb||d}t|t�r�d|kr�dkr�nn||}|dur�||d}|j�||||�|��dS)Nr%rr�r�)r�r�r(r)r�r�r%r,)r�rzr�r#r$rO�shr�r�r�r&ns

""z
_Screen.setupcCs tjdurtj�|�|t_dSr�)rSr�r)r�)r�Ztitlestringr�r�r�r)�s
z
_Screen.titlecCs:|j}|tjur(dt_dt_dt_dt_dt_|��dSr�)	r�rSrr�r�rrr�r&)r��rootr�r�r�r��s
z_Screen._destroycCs|��dSr�)r�r�r�r�r�r�sz_Screen.byecsL�fdd�}��|�tdr"dSz
t�WntyFtd�Yn0dS)Ncs���dSr�)r)r�r�r�r�r��exitGracefully�sz+_Screen.exitonclick.<locals>.exitGracefullyr�r)rRr�r�AttributeError�exit)r�r�r�r�r�r�s

z_Screen.exitonclick)
r�r�r�r�rr�r�r�r&r)r�rrr�r�r�r�rSRs�
(
rSc@s0eZdZdZdZedededfdd�ZdS)rNrkr�r�cCs,tjdurt�t_tj|tj|||d�dS)N)rkr�r�)rr�r	r
r�)r�rkr�r�r�r�r�r��s

�zTurtle.__init__)r�r�r�r�r�r�r�r�r�r�r�r�s�r�turtle_docstringdictcCsi}tD]}d|}t|�j||<qtD]}d|}t|�j||<q(td|d���}tdd�|D��}|�d�|dd�D](}|�d	t|��|�d
||�q||d}|�d	t|��|�d||�|�d�|��Wd�n1s�0YdS)
Nz_Screen.zTurtle.z%s.pyr4css$|]}|�d�dtvr|VqdS)r�r�N)r�_alias_listr�r�r�r�r�s�z&write_docstringdict.<locals>.<genexpr>zdocsdict = {

r�z%s :
z        """%s
""",

z        """%s
"""

z}
)	�_tg_screen_functionsr��__doc__�_tg_turtle_functionsr�r�r{�repr�close)r��docsdict�
methodnamer�r�r�r�r�r�r~�s$

c	Cs^dd|��i}t|�}|j}|D]6}z||t|�_Wq"tyVtd|�Yq"0q"dS)Nz!turtle_docstringdict_%(language)sr�zBad docstring-entry: %s)r��
__import__r�r�r�r�r�)�lang�modname�moduler�r�r�r�r��read_docstringssr�r�zCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc
Cs�d}}t�|j�\}}}|dd�}|dd�}|jp:g}dd�|D�}dgt|�t|�|}dd�t||�D�}	|dur�|	�d|�|�d|�|dur�|	�d|�|�d|�d�|	�}d	|}d�|�}d	|}||fS)
Nr�r�cSsg|]}d|f�qS)z=%rr�)r{r�r�r�r�r~<rz"getmethparlist.<locals>.<listcomp>cSsg|]\}}||�qSr�r�)r{r�Zdfltr�r�r�r~>r�*z**z, z(%s))�inspectZgetargs�__code__�__defaults__r�rtr<r)
�obZdefTextZcallTextrZvarargsZvarkwZitems2ZrealArgs�defaultsZitems1r�r�r��getmethparlist,s&


r�cCsJddl}|durdStd}|�d|d�}|�d|�}|�d|�}|S)Nrr��%s.r�� \(.+ %s\):�:��rer��replace�compile�sub)�docstrr�Z
turtlename�	newdocstr�parexpr�r�r��_turtle_docreviseKsr�cCsJddl}|durdStd}|�d|d�}|�d|�}|�d|�}|S)Nrr�r�r�r�r�r�)r�r�Z
screennamer�r�r�r�r��_screen_docreviseWsr�ardef {name}{paramslist}:
    if {obj} is None:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        {obj} = {init}
    try:
        return {obj}.{name}{argslist}
    except TK.TclError:
        if not TurtleScreen._RUNNING:
            TurtleScreen._RUNNING = True
            raise Terminator
        raise
c
Csl|D]b}t||�}t|�\}}|dkr4td||�qtj|||||d�}	t|	t��||j�t�|_qdS)Nr�z>>>>>>)�obj�initr�Z
paramslistZargslist)�getattrr�r��__func_body�formatr��globalsr�)
Z	functionsr�r�r�Z	docreviser�r�Zpl1Zpl2Zdefstrr�r�r��_make_global_funcsws

�r�zTurtle._screenzScreen()zTurtle._penzTurtle()�__main__cCst�rt�nt�dSr�)rNr]rUr�r�r�r��	switchpen�sr�cCslt�td�t�td�t�td�td�D]Z}|dkrDt�td�D]}td�t	d�qL|dkrxt
d�t�t�td	�t�q2td
�t
d�td�t�td�td�td�td�td
�t�t
dd
�t
dd
�t
d�td�D]$}td�t	d�td�td�q�td�t�td�D]&}td�t	d�td�td��q:t�dS)NT�dr�r�r�r��ZZmaroonr	r�r�F�Z
startstartr��redr�)r`r*ryr0r=rzr�r1rCrPr9r>r_r{)r|r�r�r�r��demo1�sX



r�cCsBtd�t�td�ttdd��tdd�d}td�td�D]}t�t	|d�qBt
d�t�rnt�q`t
�td�td	�d}td
�td�td�tdd
�D]p}|dkr�t�td	d|dd|�td�D]}t|�td�q�t�|d7}td�tt�dd�q�td�t�td�td�t�tdd�td�t�td�D](}t	dd�td�td�td��q`t�td�t�td�t�td�t�}|�d�t�}|�d�|�d�|�
�|�d�|�d�|��|�dd�|�d�|��|�d�|�dd�|�d�|�d�tt|��d}|�|�dk�r�|�d�|�d �|�|�|��|�d�|d!dk�r�|� �|� �t�|d7}�qZ|j
d"d#d$d%�|�d&�|�d�d'd(�}t!�"d�t��r|��|���q�|�d�|j
d)d*d+�|�#|d�dS),Nr�r�rr"r��r�zwait a moment...r�Zgreenr�r�r���x��Fr	r�Zyellowr��2r�r;i�(r�ZblueZoranger�g@g333333�?r�zCAUGHT! )r�r��boldr_)rSrUr�cSst�t�dSr�)rr)rrr�r�r��babaszdemo2.<locals>.babaz  Click me!)ZCourierr�r�)rS)$rprqrYrdrur;rbr�r�r4r{rxrwr`rQrrWr1rAr@r>r]rUr9rkrHrarrPryrIr=rr�time�sleeprR)r(r�Zlaenger|Ztrir�r�r�r�r�r��demo2�s�


















r�)r�)r�)EZ_ver�tkinterr�r�r�r�r�r�Zos.pathrrr�copyrrZ_tg_classesr�r�Z
_tg_utilities�__all__r�r�r�r�r�r�r�rr�r�r�r�r�rr�rr�objectr*r�r�rr�rrr-rLr
rr	rSrr
r~r�Z	_LANGUAGE�ImportErrorr�r�r�r�r�rrr�r�r�r�rr�r�r�r��<module>gs�

���5
�
c	/&/O}
"
���
5c