grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 й¼]1ãO@s dZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z ddl m Z ddlmZdddd d d d d dg Zdddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-gZd.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|gOZd}d~gZeeeedgZdd/d2d?dLdPdTdZd\dadbdddedpdudxdygZdyd€d�d‚dƒd„d…d†d‡ddˆddd‰ddŠdd‹dŒd�djdŽdVd�d@d�d`d�d‘d’d“d”d•d–d—d˜d(d™dšd›iZdœd�„ZdždŸ„ZyeeƒWnek r!ed ƒYnXGd¡d„deƒZd¢d£„Zd¤d¥„Zd¦d§Zfd¨d©„ZGdªd„dej ƒZ!ee!ej"d«ƒGd¬d­„d­ej#ƒZ$ej"Z"Gd®d¯„d¯e%ƒZ&Gd°d„deƒZ'Gd±d²„d²eƒZ(Gd³d „d e%ƒZ)Gd´dµ„dµe%ƒZ*Gd¶d„de&ƒZ+Gd·d¸„d¸e%ƒZ,Gd¹dº„dºe%ƒZ-Gd»d¼„d¼e%ƒZ.Gd½d „d e-e,ƒZ/e/Z0d¾d„Z1Gd¿dÀ„dÀe+ƒZ2GdÁd „d e/ƒZ3e3Z4dÂdÃd}„Z5dÄdÅ„Z6ed“Z7ye7d”kre6e7ƒWn>e8k r:edÆe7ƒYn ek rYedÇe7ƒYnXdÈdÉ„Z9dÊdË„Z:dÌdÍ„Z;dÎZ<dÏdЄZ=e=ee2dÑdÒe;ƒe=ee3dÓdÔe:ƒe>Z?e@dÕkrdÖdׄZAdØdÙ„ZBdÚdÛ„ZCeBƒeCƒeDƒdS)Üz-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Ú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Ú Terminatorgà?Úheightgè?Ú canvwidthi�Ú canvheighti,Ú leftrightÚ topbottomÚstandardgð?é ÚundobuffersizeièÚclassicÚblackÚnoresizeÚvisibleTÚlanguageÚenglishÚ exampleturtleÚturtleÚ examplescreenÚscreenzPython Turtle GraphicsÚ using_IDLEFcCs't|dƒ�}|jƒ}WdQRXi}xõ|D]í}|jƒ}| s2|jdƒr]q2y|jdƒ\}}Wn)tk r¡td||fƒw2YnX|jƒ}|jƒ}|d krÕt|ƒ}n@y+d |krót|ƒ}n t |ƒ}Wntk rYnX|||)ÚTKÚFrameÚ__init__Úwinfo_toplevelZ _rootwindowrzr�r‚rƒrëÚCanvasZSUNKENÚ_canvasZ ScrollbarZxviewZ HORIZONTALÚhscrollZyviewÚvscrollZ configureÚsetZ rowconfigureZcolumnconfigureÚgridr`ÚbindÚonResize)r¼Zmasterrzr�r‚rƒr¬r¬r­r÷Os,  $$$ zScrolledCanvas.__init__Nc CsÐ|r||_|r||_|r-||_|jjd|d|j d|j d|jd|jdfƒ|jjd|j|jd|jƒ|jjd|j|jd|jƒ|j ƒdS)NrëÚ scrollregionrÄgà?é) r‚rƒrërúÚconfigÚ xview_movetorzÚ yview_movetor�Ú adjustScrolls)r¼r‚rƒrër¬r¬r­r`hs     zScrolledCanvas.resetcCs|jjƒ}|jjƒ}|jjd|j||jƒ|jjd|j||jƒ||jks€||jkrý|jjddd|ddddddd dd dd d ƒ|j jddd|ddddddd dd dd d ƒn|jj ƒ|j j ƒdS) Ngà?rìr»rírîrïrðrrñròrórô) rúÚ winfo_widthÚ winfo_heightrr‚rrƒrûrþrüZ grid_forget)r¼ÚcwidthÚcheightr¬r¬r­rzs""$$ zScrolledCanvas.adjustScrollscCs|jƒdS)N)r)r¼Úeventr¬r¬r­rŠszScrolledCanvas.onResizecGs|jj|ŒS)N)rúÚbbox)r¼Úargsr¬r¬r­r ŽszScrolledCanvas.bboxcOs|jj||ŽS)N)rúÚcget)r¼r Úkwargsr¬r¬r­r“szScrolledCanvas.cgetcOs|jj||ŽdS)N)rúr)r¼r rr¬r¬r­r˜szScrolledCanvas.configcOs|jj||ŽdS)N)rúrÿ)r¼r rr¬r¬r­rÿ�szScrolledCanvas.bindcOs|jj||ŽdS)N)rúÚunbind)r¼r rr¬r¬r­r¢szScrolledCanvas.unbindcCs|jjƒdS)N)rúÚ focus_force)r¼r¬r¬r­r§szScrolledCanvas.focus_force) rÐrÑrÒr÷r`rrr rrrÿrrr¬r¬r¬r­rIs        rúc@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú_RootcCstjj|ƒdS)N)rõÚTkr÷)r¼r¬r¬r­r÷±sz_Root.__init__cCs8t|||||ƒ|_|jjddddƒdS)NÚexpandr»ÚfillZboth)rrúÚpack)r¼rzr�r r r¬r¬r­Ú setupcanvas´sz_Root.setupcanvascCs|jS)N)rú)r¼r¬r¬r­Ú _getcanvas¸sz_Root._getcanvascCs!|jd||||fƒdS)Nz %dx%d%+d%+d)Zgeometry)r¼rzr�ÚstartxÚstartyr¬r¬r­Ú set_geometry»sz_Root.set_geometrycCs|jd|ƒdS)NZWM_DELETE_WINDOW)Z wm_protocol)r¼Údestroyr¬r¬r­Ú ondestroy¾sz_Root.ondestroycCs |jƒS)N)Zwinfo_screenwidth)r¼r¬r¬r­Ú win_widthÁsz_Root.win_widthcCs |jƒS)N)Zwinfo_screenheight)r¼r¬r¬r­Ú win_heightÄsz_Root.win_heightN) rÐrÑrÒr÷rrrrrrr¬r¬r¬r­r¯s       rc@sðeZdZedd„ƒZedd„ƒZdd„Zdd„Zd d d d d d „Zd d„Z d d d d dd„Z dd„Z dd„Z dd„Z dd„Zd dd„Zdd„Zdd dd„Zdd d d!„Zdd d"d#„Zdd d$d%„Zd&d'„Zd d(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zd d d d<d=„Z d>d?„Z!d@dA„Z"dBdC„Z#d d d dDdE„Z$d S)FÚTurtleScreenBasecCs&tjddddƒ}|jƒ|S)Nrzr»r�)rõÚ PhotoImageÚblank)Zimgr¬r¬r­Ú _blankimageÒs zTurtleScreenBase._blankimagecCstjd|ƒS)NÚfile)rõr!)r¦r¬r¬r­Ú_imageÚszTurtleScreenBase._imagecCsº||_t|tƒr3|jj}|jj}nat|jjdƒƒ}t|jjdƒƒ}|jjd| d| d|d|dfƒ||_||_d|_|_ dS)Nrzr�rrÄgð?) Úcvr¿rr‚rƒr¥rrÚxscaleÚyscale)r¼r&ÚwÚhr¬r¬r­r÷ás  1  zTurtleScreenBase.__init__cCs|jjdddddƒS)Nrrr¯Úoutline)rrrrrr)r&Zcreate_polygon)r¼r¬r¬r­Ú _createpolyîszTurtleScreenBase._createpolyNFc CsÙg}x=|D]5\}} |j||jƒ|j| |jƒq W|jj||Œ|dk r{|jj|d|ƒ|dk r�|jj|d|ƒ|dk r¿|jj|d|ƒ|rÕ|jj|ƒdS)Nrr+rz)Úappendr'r(r&ÚcoordsÚ itemconfigureÚ tag_raise) r¼ZpolyitemÚ coordlistrr+rzÚtopÚclr¹rºr¬r¬r­Ú _drawpolyós    zTurtleScreenBase._drawpolyc Cs.|jjdddddddddtjƒS)Nrrr¯rzrÄZcapstyle)r&Z create_linerõZROUND)r¼r¬r¬r­Ú _createline s$zTurtleScreenBase._createlinec CsÃ|dk reg}x=|D]5\}}|j||jƒ|j| |jƒqW|jj||Œ|dk r‡|jj|d|ƒ|dk r©|jj|d|ƒ|r¿|jj|ƒdS)Nrrz)r-r'r(r&r.r/r0) r¼Zlineitemr1rrzr2r3r¹rºr¬r¬r­Ú _drawlines   zTurtleScreenBase._drawlinecCs|jj|ƒdS)N)r&Údelete)r¼Úitemr¬r¬r­Ú_delete)szTurtleScreenBase._deletecCs|jjƒdS)N)r&r,)r¼r¬r¬r­Ú_update/szTurtleScreenBase._updatecCs|jj|ƒdS)N)r&Úafter)r¼rr¬r¬r­Ú_delay4szTurtleScreenBase._delayc Cs>y|jj|ƒ}d}Wntjk r9d}YnX|S)NTF)r&Z winfo_rgbrõZTclError)r¼r9ZrgbÚokr¬r¬r­Ú_iscolorstring8s   zTurtleScreenBase._iscolorstringcCs@|dk r,|jjd|ƒ|jƒn|jjdƒSdS)Nrë)r&rr:r)r¼r9r¬r¬r­Ú_bgcolorBs  zTurtleScreenBase._bgcolorc Cs­|\}}||j}||j}ddddddi}|jj|d| d|d ||d |d |ƒ} |jj| ƒ\} } } } |jjƒ| | dfS) NrPÚswÚcenterrÌr_Zser»ÚtextÚanchorrÚfont)r'r(r&Z create_textr r,)r¼r[ÚtxtÚalignrDrWr¹rºrCr8Zx0Zy0Zx1Zy1r¬r¬r­Ú_writeKs   ' zTurtleScreenBase._writer»cs\ˆdkr&ˆjj|d|ƒn2‡‡fdd†}ˆjj|d|||ƒdS)Nz csKˆjj|jƒˆjˆjj|jƒ ˆj}}ˆ||ƒdS)N)r&Úcanvasxr¹r'Úcanvasyrºr()r r¹rº)Úfunr¼r¬r­Úeventfunfs!z+TurtleScreenBase._onclick..eventfun)r&Ú tag_unbindÚtag_bind)r¼r8rJÚnumÚaddrKr¬)rJr¼r­Ú_onclick]s zTurtleScreenBase._onclickcs\ˆdkr&ˆjj|d|ƒn2‡‡fdd†}ˆjj|d|||ƒdS)NzcsKˆjj|jƒˆjˆjj|jƒ ˆj}}ˆ||ƒdS)N)r&rHr¹r'rIrºr()r r¹rº)rJr¼r¬r­rKxs!z-TurtleScreenBase._onrelease..eventfun)r&rLrM)r¼r8rJrNrOrKr¬)rJr¼r­Ú _onreleasels zTurtleScreenBase._onreleasecs\ˆdkr&ˆjj|d|ƒn2‡‡fdd†}ˆjj|d|||ƒdS)Nzc sdyKˆjj|jƒˆjˆjj|jƒ ˆj}}ˆ||ƒWntk r_YnXdS)N)r&rHr¹r'rIrºr(r±)r r¹rº)rJr¼r¬r­rK‹s ! z*TurtleScreenBase._ondrag..eventfun)r&rLrM)r¼r8rJrNrOrKr¬)rJr¼r­Ú_ondrags zTurtleScreenBase._ondragcsVˆdkr#ˆjjd|ƒn/‡‡fdd†}ˆjjd|||ƒdS)Nz csKˆjj|jƒˆjˆjj|jƒ ˆj}}ˆ||ƒdS)N)r&rHr¹r'rIrºr()r r¹rº)rJr¼r¬r­rK s!z1TurtleScreenBase._onscreenclick..eventfun)r&rrÿ)r¼rJrNrOrKr¬)rJr¼r­Ú_onscreenclick”s zTurtleScreenBase._onscreenclickcsSˆdkr&|jjd|dƒn)‡fdd†}|jjd||ƒdS)Nzcs ˆƒdS)Nr¬)r )rJr¬r­rK­sz0TurtleScreenBase._onkeyrelease..eventfun)r&rrÿ)r¼rJrªrKr¬)rJr­Ú _onkeyrelease¦s zTurtleScreenBase._onkeyreleasecs—ˆdkrH|dkr.|jjddƒq“|jjd|dƒnK‡fdd†}|dkr||jjd|ƒn|jjd||ƒdS)Nz z cs ˆƒdS)Nr¬)r )rJr¬r­rK¼sz.TurtleScreenBase._onkeypress..eventfun)r&rrÿ)r¼rJrªrKr¬)rJr­Ú _onkeypress±s   zTurtleScreenBase._onkeypresscCs|jjƒdS)N)r&r)r¼r¬r¬r­Ú_listenÃszTurtleScreenBase._listencCs6|dkr|jj|ƒn|jj||ƒdS)Nr)r&Z after_idler;)r¼rJÚtr¬r¬r­Ú_ontimerÈs zTurtleScreenBase._ontimercCs|jjddd|ƒS)NrÚimage)r&Z create_image)r¼rYr¬r¬r­Ú _createimageÐszTurtleScreenBase._createimagecCsN|\}}|jj|||j| |jfƒ|jj|d|ƒdS)NrY)r&r.r'r(Ú itemconfig)r¼r8r[rYr¹rºr¬r¬r­Ú _drawimageÕs (zTurtleScreenBase._drawimagecCs*|jj|d|ƒ|jj|ƒdS)NrY)r&r[Z tag_lower)r¼r8rYr¬r¬r­Ú _setbgpicÝszTurtleScreenBase._setbgpiccCs|jj|ƒS)N)r&rÙ)r¼r8r¬r¬r­Ú_typeåszTurtleScreenBase._typecsA|jj|ƒ‰‡fdd†tdtˆƒdƒDƒ}|S)Ncs)g|]}ˆ|ˆ|d f‘qS)r»r¬)Ú.0Úi)r3r¬r­ú ôs z/TurtleScreenBase._pointlist..rrÄ)r&r.ÚrangeÚlen)r¼r8Úplr¬)r3r­Ú _pointlistës+zTurtleScreenBase._pointlistcCs#|jjd||||fƒdS)Nr)r&r)r¼Úsrx1Úsry1Úsrx2Úsry2r¬r¬r­Ú_setscrollregion÷sz!TurtleScreenBase._setscrollregionc Csª|jjƒ}x”|D]Œ}t|jj|ƒƒ}g}xR|rŽ|dd…\}}|j||ƒ|j||ƒ|dd…}q=W|jj||ŒqWdS)NrÄ)r&Zfind_allrÓr.r-) r¼Z xscalefactorZ yscalefactorrØr8Z coordinatesZ newcoordlistr¹rºr¬r¬r­Ú_rescaleús  zTurtleScreenBase._rescalecCs£t|jtƒs"|j|jfS||koD|koDdknr_|jj|jjfS|dk rt||_|dk r‰||_|jj|||ƒdS)N)r¿r&rr‚rƒr`)r¼r‚rƒrër¬r¬r­Ú_resizes'    zTurtleScreenBase._resizecCsZ|jjƒ}|dkr(|jd}|jjƒ}|dkrP|jd}||fS)Nr»rzr�)r&rr)r¼rzr�r¬r¬r­Ú _window_sizes    zTurtleScreenBase._window_sizecCstjƒdS)N)rõr)r¼r¬r¬r­r s zTurtleScreenBase.mainloopcCstj||ƒS)N)rZ askstring)r¼r)Úpromptr¬r¬r­r(/s zTurtleScreenBase.textinputc Cs"tj||d|d|d|ƒS)NZ initialvalueZminvalueÚmaxvalue)rZaskfloat)r¼r)rnÚdefaultZminvalZmaxvalr¬r¬r­r>szTurtleScreenBase.numinput)%rÐrÑrÒÚ staticmethodr#r%r÷r,r4r5r6r9r:r<r>r?rGrPrQrRrSrTrUrVrXrZr\r]r^rerjrkrlrmrr(rr¬r¬r¬r­r ÊsF                   r c@seZdZdS)r€N)rÐrÑrÒr¬r¬r¬r­r€Ys c@seZdZdS)ÚTurtleGraphicsErrorN)rÐrÑrÒr¬r¬r¬r­rrbs rrc@s.eZdZddd„Zddd„ZdS)rNcCs³||_|dkr3t|tƒr¦t|ƒ}ns|dkr�t|tƒr¦|jƒjdƒr¦t|ƒr¦tj |ƒ}n%|dkr–g}nt d|ƒ‚||_ dS)NÚpolygonrYz.gifÚcompoundzThere is no shape type %s) r^r¿rÓr¶rãÚlowerÚendswithrrr%rrÚ_data)r¼Ztype_Údatar¬r¬r­r÷ns   !  zShape.__init__cCsQ|jdkr"td|jƒ‚|dkr4|}|jj|||gƒdS)Nrtz Cannot add component to %s Shape)r^rrrwr-)r¼Úpolyrr+r¬r¬r­Ú addcomponent~s   zShape.addcomponent)rÐrÑrÒr÷rzr¬r¬r¬r­rgs c@s^eZdZddd„Zddd„Zdd„Zd d „Zd d „Zd d„ZdS)ÚTbufferr‡cCs2||_dgg||_d|_d|_dS)Nr»Frâ)ÚbufsizeÚbufferÚptrÚcumulate)r¼r|r¬r¬r­r÷˜s  zTbuffer.__init__NcCsb|dkr9xFt|jƒD]}dg|j|.éÿzbad color sequence: %sz #%02x%02x%02x)rcr¿rãr>rrÚ TypeErrorr¡r)r¼r9r”ÚgÚbr¬r¬r­Ú _colorstrvs  %TzTurtleScreen._colorstrcs¦ˆjdƒsˆStˆƒdkrA‡fdd†d Dƒ}nHtˆƒdkry‡fd d†ˆdd…Dƒ}ntd ˆƒ‚t‡fd d†|DƒƒS) Nr•rˆcs-g|]#}tˆ||d…dƒ‘qS)rÄr…)r¥)r_r`)Úcstrr¬r­ra•s z'TurtleScreen._color..r»r�rŒr‡cs'g|]}dtˆ|dƒ‘qS)r…)r¥)r_r*)rr¬r­ra—s zbad colorstring: %scs!g|]}|ˆjd‘qS)r)r)r_rË)r¼r¬r­rašs )r»r�rŒ)r rcrrr¶)r¼rr3r¬)rr¼r­Ú_color‘s&zTurtleScreen._colorcCsP|dkr|jS|dkr1t|ƒ|_n|dkrLt|ƒ|_dS)Ngð?r)rr¤r¥)r¼Zcmoder¬r¬r­rœs    zTurtleScreen.colormodecCs2x+|jD] }|j|jƒ|jƒq WdS)N)r Ú_setmoderr`)r¼r�r¬r¬r­r`±szTurtleScreen.resetcCs|jS)N)r )r¼r¬r¬r­r+½szTurtleScreen.turtlescGsL|r|j|ƒ}nd}|j|ƒ}|dk rH|j|ƒ}|S)N)rr?r)r¼r r9r¬r¬r­rÆs zTurtleScreen.bgcolorcCs]|dkr|jSt|ƒ|_d|_|dk rFt|ƒ|_|jrY|jƒdS)Nr)r r¥r rr,)r¼Únrr¬r¬r­r*Ýs    zTurtleScreen.tracercCs&|dkr|jSt|ƒ|_dS)N)rr¥)r¼rr¬r¬r­rùs zTurtleScreen.delaycCsLtjsdt_t‚|jdkrH|jd7_|j|j;_dS)NTrr»)rÚ_RUNNINGr€r r )r¼r¬r¬r­Ú _incrementudcs   zTurtleScreen._incrementudccCsT|j}d|_x(|jƒD]}|jƒ|jƒqW||_|jƒdS)NT)r r+Ú _update_dataÚ _drawturtler:)r¼ÚtracingrWr¬r¬r­r,s    zTurtleScreen.updatecCs|jƒdS)Nr)rm)r¼r¬r¬r­r.szTurtleScreen.window_widthcCs|jƒdS)Nr»)rm)r¼r¬r¬r­r-%szTurtleScreen.window_heightcCs|jS)N)r&)r¼r¬r¬r­r.s zTurtleScreen.getcanvascCst|jjƒƒS)N)ÚsortedrþrÝ)r¼r¬r¬r­r:s zTurtleScreen.getshapesr»cCs|j|||ƒdS)N)rS)r¼rJrrOr¬r¬r­rREszTurtleScreen.onclickcCsa|dkr.||jkrM|jj|ƒn||jkrM|jj|ƒ|j||ƒdS)N)rÚremover-rT)r¼rJrªr¬r¬r­rVs  zTurtleScreen.onkeycCsm|dkr.||jkrY|jj|ƒn+|dk rY||jkrY|jj|ƒ|j||ƒdS)N)rr#r-rU)r¼rJrªr¬r¬r­rts  zTurtleScreen.onkeypresscCs|jƒdS)N)rV)r¼ÚxdummyÚydummyr¬r¬r­r”s zTurtleScreen.listenrcCs|j||ƒdS)N)rX)r¼rJrWr¬r¬r­r" szTurtleScreen.ontimercCs_|dkr|jS||jkr8|j|ƒ|j|<|j|j|j|ƒ||_dS)N)r rÿr%r]r)r¼Zpicnamer¬r¬r­rµs  zTurtleScreen.bgpiccCs|j|||ƒS)N)rl)r¼r‚rƒrër¬r¬r­r%ÍszTurtleScreen.screensize)$rÐrÑrÒrr²r÷r5rr'r#rrrr`r+rr*rrr,r.r-rrrRrrrr"rr%r!r$rrr r¬r¬r¬r­r¼sB & " '#       c@sÿeZdZdeddƒdeddƒdeddƒiZdZdZdZedd „Zd d „Z d d d„Z dd„Z ddd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd d*d+„Zd,d-„Zd.d/„Zd0d1„Zd d2d3„Zd d4d5„Zd6d7„Zd8d9„Zd d d:d;„Z dd<d=„Z!d d d>d?„Z"d d@dA„Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,d S)BÚ TNavigatorr†gð?grrrr»cCs[|j|_|j|_||_d|_|jƒd|_|j|ƒtj |ƒdS)N) ÚDEFAULT_ANGLEOFFSETÚ _angleOffsetÚDEFAULT_ANGLEORIENTÚ _angleOrientrÚ undobufferr:rr&r`)r¼rr¬r¬r­r÷òs       zTNavigator.__init__cCs)tddƒ|_tj|j|_dS)Ng)rÚ _positionr&ÚSTART_ORIENTATIONrÚ_orient)r¼r¬r¬r­r`üszTNavigator.resetNcCsj|dkr|jS|dkr#dS||_|dkrMd|_d|_n|jd|_d |_dS) Nr†rrrr»g@)r†rr)r†rrâ)rr(r*Ú _fullcircle)r¼rr¬r¬r­rs      zTNavigator._setmodecCsB||_d||_|jdkr1d|_n |d|_dS)Nihr†rg@)r/Ú _degreesPerAUrr()r¼Ú fullcircler¬r¬r­Ú_setDegreesPerAUs    zTNavigator._setDegreesPerAUg€v@cCs|j|ƒdS)N)r2)r¼r1r¬r¬r­r:szTNavigator.degreescCs|jdtjƒdS)NrÄ)r2rÆrÇ)r¼r¬r¬r­r^4s zTNavigator.radianscCs%|j|j|}|j|ƒdS)N)r,r.Ú_goto)r¼r;Zender¬r¬r­Ú_goBszTNavigator._gocCs&||j9}|jj|ƒ|_dS)N)r0r.rÍ)r¼rÊr¬r¬r­Ú_rotateGs zTNavigator._rotatecCs ||_dS)N)r,)r¼Úendr¬r¬r­r3LszTNavigator._gotocCs|j|ƒdS)N)r4)r¼r;r¬r¬r­rCPszTNavigator.forwardcCs|j| ƒdS)N)r4)r¼r;r¬r¬r­r/gszTNavigator.backcCs|j| ƒdS)N)r5)r¼rÊr¬r¬r­r_{szTNavigator.rightcCs|j|ƒdS)N)r5)r¼rÊr¬r¬r­rP�szTNavigator.leftcCs|jS)N)r,)r¼r¬r¬r­r[¥s zTNavigator.poscCs |jdS)Nr)r,)r¼r¬r¬r­r|²s zTNavigator.xcorcCs |jdS)Nr»)r,)r¼r¬r¬r­r}Às zTNavigator.ycorcCs<|dkr"|jt|Œƒn|jt||ƒƒdS)N)r3r)r¼r¹rºr¬r¬r­rIÏs zTNavigator.gotocCs!|jddƒ|jdƒdS)Nr)rIrd)r¼r¬r¬r­rLòs zTNavigator.homecCs!|jt||jdƒƒdS)Nr»)r3rr,)r¼r¹r¬r¬r­riszTNavigator.setxcCs!|jt|jd|ƒƒdS)Nr)r3rr,)r¼rºr¬r¬r­rjszTNavigator.setycCsz|dk rt||ƒ}t|tƒr3|}n6t|tƒrQt|Œ}nt|tƒri|j}t||jƒS)N)rr¿r¶r&r,Úabs)r¼r¹rºr[r¬r¬r­r;$s   zTNavigator.distancecCsÌ|dk rt||ƒ}t|tƒr3|}n6t|tƒrQt|Œ}nt|tƒri|j}||j\}}ttj||ƒdtjdƒd}||j }|j |j ||j S)Ng€f@r‡g€v@) rr¿r¶r&r,rrÆÚatan2rÇr0r(r*r/)r¼r¹rºr[Úresultr¬r¬r­ruDs   * zTNavigator.towardscCs_|j\}}ttj||ƒdtjdƒd}||j}|j|j||jS)Ng€f@r‡g€v@) r.rrÆr8rÇr0r(r*r/)r¼r¹rºr9r¬r¬r­rJgs * zTNavigator.headingcCsK||jƒ|j}|j}||d||d}|j|ƒdS)Ng@)rJr*r/r5)r¼Zto_anglerÊÚfullr¬r¬r­rdvs zTNavigator.setheadingc Csã|jr(|jjdgƒd|j_|jƒ}|dkrI|j}|dkr“t|ƒ|j}dttdt|ƒddƒ|ƒ}d||}d|}d |tj |tj d |j ƒ}|d kr÷| | | }}}|j ƒ} |j ƒ} |d kr.|j d d ƒn |jd ƒ|j|ƒxHt|ƒD]:} |j|ƒ|j|ƒ|jd ƒ|j|ƒqUW|j| ƒ|d kr½|j | | ƒ|j|ƒ|jrßd |j_dS) NÚseqTr»é g@g€M@gð?gà?g@g€f@rF)r+r€rrpr/r7r¥ÚminrÆrÉrÇr0Ú_tracerr<r5rbr4) r¼ÚradiusZextentÚstepsrpZfracr)Zw2ÚlÚtrZdlr`r¬r¬r­r4’s>      + )            zTNavigator.circlecCsdS)Nr¬)r¼rÌr¬r¬r­rpÓszTNavigator.speedcCsdS)Nr¬)r¼Úarr¬r¬r­r>ÕszTNavigator._tracercCsdS)Nr¬)r¼rr¬r¬r­r<×szTNavigator._delay)-rÐrÑrÒrr-Z DEFAULT_MODEr'r)r÷r`rr2r:r^r4r5r3rCr/r_rPr[r|r}rIrLrirjr;rurJrdr4rpr>r<r@r3r0rbrQr\rerfrcr¬r¬r¬r­r&æsV             #    #  Ar&c@sHeZdZeddd„Zededdd„Zdd d „Zdd d „Zd d„Zdd„Z dd„Z ddd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd „Zdd!d"„Zd#d$d%„Zd#d&d'd(„Zd)d*„Zd+d,„ZeZeZeZe Ze ZeZeZdS)-ÚTPenracCs#||_d|_tj|ƒdS)N)Ú _resizemoder+rDÚ_reset)r¼rar¬r¬r­r÷és  z TPen.__init__rWrAcCsgd|_d|_||_||_d|_d|_d|_d|_d|_d|_ d|_ dS)Nr»Tr�çð?ç)rGrG)rGrHrHrG) Ú_pensizeÚ_shownÚ _pencolorÚ _fillcolorÚ_drawingÚ_speedÚ_stretchfactorÚ _shearfactorÚ_tiltÚ _shapetrafoÚ _outlinewidth)r¼rWrAr¬r¬r­rFîs          z TPen._resetNcCs?|dkr|jS|jƒ}|dkr;|jd|ƒdS)NÚautoÚuserr‹ra)rTrUr‹)rErurV)r¼Zrmoder¬r¬r­raüs    zTPen.resizemodecCs'|dkr|jS|jd|ƒdS)NrY)rIrV)r¼rzr¬r¬r­rYs z TPen.pensizecCs!|js dS|jddƒdS)NrXF)rMrV)r¼r¬r¬r­rZ/s z TPen.penupcCs!|jr dS|jddƒdS)NrXT)rMrV)r¼r¬r¬r­rX=s z TPen.pendowncCs|jS)N)rM)r¼r¬r¬r­rNKs z TPen.isdownc Cs›ddddddddd d i}|dkr7|jS||krP||}n7d |kogd knr�tt|ƒƒ}nd}|jd |ƒdS)NZfastestrÚfastr‡Únormalr‹Zslowr�Zslowestr»gà?g%@rp)rNr¥rrV)r¼rpZspeedsr¬r¬r­rpZs$   z TPen.speedcGs½|r—t|ƒ}|dkr/|d}}n1|dkrJ|\}}n|dkr`|}}|j|ƒ}|j|ƒ}|jd|d|ƒn"|j|jƒ|j|jƒfSdS)Nr»rrÄr�rWrA)rcrrVrrKrL)r¼r rAZpcolorZfcolorr¬r¬r­r9€s      z TPen.colorcGsO|r;|j|ƒ}||jkr(dS|jd|ƒn|j|jƒSdS)NrW)rrKrVr)r¼r r9r¬r¬r­rW®s z TPen.pencolorcGsO|r;|j|ƒ}||jkr(dS|jd|ƒn|j|jƒSdS)NrA)rrLrVr)r¼r r9r¬r¬r­rAÓs zTPen.fillcolorcCs|jddƒdS)NÚshownT)rV)r¼r¬r¬r­ro÷s zTPen.showturtlecCs|jddƒdS)NrXF)rV)r¼r¬r¬r­rK szTPen.hideturtlecCs|jS)N)rJ)r¼r¬r¬r­rO s zTPen.isvisiblecKs¦d|jd|jd|jd|jd|jd|jd|jd|jd |jd |j d |j i }|pr|sy|St |t ƒr‘|}ni}|j |ƒi}x|D]}||||.)rYrs) r’rbr^rþr9Ú_itemr,rZrw)r¼rbr8r¬)r’r­raº s&  ))z_TurtleImage._setshapeN)rÐrÑrÒr÷rar¬r¬r¬r­r`± s  r`c@sÔeZdZgZdedededdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dddd„Z dd„Zdd„Zdd„Zdd„Zddd „Zdddd!d"„Zdd#d$„Zd%d&„Zdd'd(„Zd)d*„Zddddd+d,„Zd-d.„Zd/d0„Zd1d2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd<d=„Z d>d?„Z!d@dA„Z"dBdC„Z#dDdEdF„Z$dGdH„Z%dIdJ„Z&dKdL„Z'ddMdN„Z(dOdP„Z)d1dQdndUdV„Z*dWdX„Z+dYdZ„Z,d[d\„Z-d]d^„Z.d_d`„Z/e/Z0ddadb„Z1dcdddde„Z2dcddfdg„Z3dcddhdi„Z4djdk„Z5dldm„Z6eZ7dS)or NrkrˆrŒcCs¹t|tƒr||_n±t|tƒrU|tjkrItjj|ƒ||_nwt|ttfƒr¼x_tjD]}|j |krt||_PqtWt|ƒ|_tjj|jƒnt d|ƒ‚|j}t j ||j ƒƒtj |ƒ|jj|ƒ|jƒ|_t||ƒ|_d|_d|_d|_|_||_d|_|jƒ|_|jg|_|jg|_g|_||_t |ƒ|_!|j"ƒdS)Nzbad canvas argument %sF)#r¿Ú_Screenr’rr Úscreensr-rrùr&rrr&r÷rrDr r5ÚdrawingLineItemr`r�Ú_polyÚ _creatingPolyÚ _fillitemÚ _fillpathrJÚ_hidden_from_screenÚcurrentLineItemr,Ú currentLinerØÚ stampItemsÚ_undobuffersizer{r+r:)r¼ZcanvasrkrˆrŒr’r¬r¬r­r÷× s@           zRawTurtle.__init__cCs<tj|ƒtj|ƒ|jƒ|jƒ|jƒdS)N)r&r`rDrFÚ_clearr r:)r¼r¬r¬r­r`ÿ s     zRawTurtle.resetcCs7|dks|dkr$d|_nt|ƒ|_dS)Nr)r+r{)r¼Úsizer¬r¬r­rh s zRawTurtle.setundobuffercCs |jdkrdS|jjƒS)Nr)r+rƒ)r¼r¬r¬r­rx+ s zRawTurtle.undobufferentriescCs˜d|_|_x!|jD]}|jj|ƒqW|jjƒ|_g|_|jrk|jj |j ƒ|jg|_|j ƒ|j |j ƒdS)N)rirjrØr’r9r5rlrmrMr-r,r7rhro)r¼r8r¬r¬r­rp8 s   zRawTurtle._clearcCs|jƒ|jƒdS)N)rpr:)r¼r¬r¬r­r5F s zRawTurtle.clearcCsa|jjƒ|jjdkr#dSt|jƒdkr]|jj|j|j|j|jƒdS)Nrr») r’rr rcrmr6rlrKrI)r¼r¬r¬r­rU s  zRawTurtle._update_datacCs¤|j}|jdkrdS|jdkr\|jƒ|jƒ|jƒ|j|jƒnD|jƒ|jdkr x|jƒD]}|jƒq‚W|jƒdS)Nrr») r’r rr r:r<rr r+)r¼r’rWr¬r¬r­r:] s     zRawTurtle._updatecCs|jj||ƒS)N)r’r*)r¼Úflagrr¬r¬r­r>o szRawTurtle._tracercCs|jj|ƒS)N)r’r)r¼r r¬r¬r­r„ szRawTurtle._colorcCs|jj|ƒS)N)r’r)r¼r r¬r¬r­r‡ szRawTurtle._colorstrc Cs t|tƒr|Sy|\}}}Wn.ttfk rVtdt|ƒƒ‚YnX|jjdkrŽdd„|||fDƒ\}}}d|ko¥dknoßd|koÁdknoßd|koÝdknsøtdt|ƒƒ‚d|||fS) Nzbad color arguments: %sgð?cSs g|]}td|ƒ‘qS)gào@)r)r_r¹r¬r¬r­ra” s z!RawTurtle._cc..rrzbad color sequence: %sz #%02x%02x%02x)r¿rãrr¡rrr’r)r¼r r”rrr¬r¬r­Ú_ccŠ s%Tz RawTurtle._cccs@|j‰|j|jƒ|j}d|_d|_t|ƒ}ˆ|_||_ˆ|_tˆ|jjƒ|_ˆjj|ƒˆj |jjj }|dkrºˆj ƒ|j_ ni|dkrèˆj ˆj djƒ|j_ n;|dkr#‡fdd†ˆj |jjjDƒ|j_ ˆjƒ|_|jƒ|S)NrsrYr"rtcsg|]}ˆjƒ‘qSr¬)r,)r_r8)r’r¬r­ra» s z#RawTurtle.clone..)r’r[rMr�rr`rbr r-rþr^r,rcrZrwr5rlr:)r¼r�ÚqÚttyper¬)r’r­r8™ s,          "   zRawTurtle.clonecCsY|dkr|jjS||jjƒkr;td|ƒ‚|jj|ƒ|jƒdS)NzThere is no shape named %s)r�rbr’rrrrar:)r¼rr¬r¬r­rkÁ s   zRawTurtle.shapecCs||ko"|ko"dknrF|j\}}|||jfS|dks^|dkrjtdƒ‚|dk r |dkr‘||f}qË||f}n+|dk rÂ|jd|f}n |j}|dkrà|j}|jddd|d|ƒdS)Nrz(stretch_wid/stretch_len must not be zerorarUrYr+)rOrSrrrV)r¼Z stretch_widZ stretch_lenr+rYr¬r¬r­rlÜ s '       zRawTurtle.shapesizecCs-|dkr|jS|jddd|ƒdS)NrarUrn)rPrV)r¼Zshearr¬r¬r­rn s zRawTurtle.shearfactorcCsK| |j|j}|tjddtj}|jddd|ƒdS)Ng€f@rÄrarUrs)r0r*rÆrÇrV)r¼rÊrsr¬r¬r­rg szRawTurtle.settiltanglecCsK|dkr:|j dtj|j}||j|jS|j|ƒdS)Ng€f@)rQrÆrÇr*r0r/rg)r¼rÊrsr¬r¬r­rt3 s zRawTurtle.tiltanglecCs|j||jƒƒdS)N)rgrt)r¼rÊr¬r¬r­rsM szRawTurtle.tiltcCs“||ko-|ko-|ko-dknr9|jS|j\}}}}|dk r`|}|dk rr|}|dk r„|}|dk r–|}||||dkrºtdƒ‚||||f|_tj| |ƒdtj} tj| ƒtj| ƒ} } | || || || || || || || |f\} } }}| |f|_| ||_| |_ |j ddƒdS)Nrz0Bad shape transform matrix: must not be singularrÄrarU) rRrrrÆr8rÇrÉrÈrOrPrQrV)r¼Út11Út12Út21Út22Zm11Zm12Zm21Zm22Zalfar]r^Za11Za12Za21Za22r¬r¬r­rm` s,2     0  zRawTurtle.shapetransformcs�|j‰|j\‰‰|j\‰‰tˆˆˆjˆjƒ}dt|ƒ|\‰‰‡‡‡‡‡fdd†|DƒS)Ngð?csQg|]G\}}ˆˆ|ˆ|ˆjˆˆ |ˆ|ˆjf‘qSr¬)r'r()r_r¹rº)Úe0Úe1Úp0Úp1r’r¬r­ra‘ s z(RawTurtle._polytrafo..)r’r,r.rr(r'r7)r¼ryÚer¬)rzr{r|r}r’r­Ú _polytrafoˆ s zRawTurtle._polytrafocCsE|jj|jj}|jdkrA|j|j|jdkƒSdS)Nrsrt)r’rþr�rbr^Ú _getshapepolyrw)r¼rkr¬r¬r­rG” s zRawTurtle.get_shapepolyFcs¬|jdks|r-|j\‰‰‰‰nY|jdkrstd|jdƒ}|dd|f\‰‰‰‰n|jdkr†|St‡‡‡‡fdd†|DƒƒS) NrUrTr»g@rr‹cs:g|]0\}}ˆ|ˆ|ˆ|ˆ|f‘qSr¬r¬)r_r¹rº)rvrwrxryr¬r­ra° s z+RawTurtle._getshapepoly..)rErRÚmaxrIr¶)r¼rsrtrAr¬)rvrwrxryr­r€¥ s!zRawTurtle._getshapepolyc Cs^|j}|j|jj}|j}|jj}|jr½|jdkr½|jdkr½d|_ |j }|dkr|j dkrŽd}n$|j dkr©|j }n |j }|j|j|ƒƒ}|j|j}}|j||d|d|d |d d ƒqZ|d kr-|j||j|ƒqZ|d krZxt||ƒD]m\} \} }}|j|j| d ƒƒ} |j| | d|j|ƒd|j|ƒd |j d d ƒqIWn�|j rÊdS|dkrï|j|dddƒnb|d kr|j||j|jdj ƒn3|d krQx$|D]} |j| dddƒq1Wd |_ dS)NrFrsr‹r»rTrr+rzr2TrYrtr¯r"©rr©rr©rr)r‚rƒr„©rr©rr©rr)r…r†r‡)r’rþr�rbr^rcrJr r rkrwrErIrSrr€rLrKr4r\r,Úziprs) r¼r’rkruZtitemÚtshaper)ÚfcÚocr8ryr¬r¬r­r ² sF   '        %&     zRawTurtle._drawturtlec Csÿ|j}|j|jj}|j}|j}|dkrØ|jƒ}|jdkr^d}n$|jdkry|j}n |j }|j |j |ƒƒ}|j |j }}|j||d|d|d|dd ƒný|d kr |jd ƒ}|j||j|ƒnÉ|d krÕg}x'|D]} |jƒ} |j| ƒq%Wt|ƒ}x~t||ƒD]m\} \} }}|j |j | d ƒƒ} |j| | d|j|ƒd|j|ƒd|j dd ƒqdW|jj|ƒ|jjd |fƒ|S)Nrsr‹r»rTrr+rzr2TrYr¯rtrr)r’rþr�rbr^rwr,rErIrSrr€rLrKr4rZr\r,r-r¶rˆrsrnr+r€) r¼r’rkrur‰Ústitemr)rŠr‹Úelementr8ryr¬r¬r­rrÚ s>             %#zRawTurtle.stampcCsú||jkrbt|tƒrBx1|D]}|jj|ƒq%Wn|jj|ƒ|jj|ƒd|f}|j}||jkrŠdS|jj|ƒ}|jj|ƒ||j krÒ|j d|j |_ |jj |j d|j dgƒdS)Nrrr») rnr¿r¶r’r9r#r+r}Úindexr~r|Úinsert)r¼ÚstampidZsubitemr8ÚbufrŽr¬r¬r­Ú _clearstamp s   zRawTurtle._clearstampcCs|j|ƒ|jƒdS)N)r’r:)r¼r�r¬r¬r­r6 s zRawTurtle.clearstampcCsƒ|dkr"|jdd…}n5|dkrD|jd|…}n|j|d…}x|D]}|j|ƒq^W|jƒdS)Nr)rnr’r:)r¼rZtoDeleter8r¬r¬r­r7, s   zRawTurtle.clearstampsc CsZ|j|j|jt|jtƒf}|j}d|j|||j|j dd…|j |jƒ|j dd…ff}|j r–|j j |ƒ|j}|jrÐ|jdkrÐ||}|d|jd|d|jd}dt|ddd|j|jƒ}|d|} x�td|ƒD]p} | dkrLd } nd } || | |_|jr—|j|j||jf|j|j| ƒ|jƒq1W|jrÐ|j|jdd d d |jƒ|jré|j j|ƒt|jtƒr |jj|ƒ||_|jr-|jj|ƒt|j ƒdkrL|jƒ|jƒdS)NÚgor»rrÄgà?r�gš™™™™™ñ?gð?TFrr¯rzé*©rr©rr)r•r–)rMrKrIr¿rjrÓr’r,rlrmrerØr+r€rNr r'r(r¥rbr6rfr:r-rhrgrcr[) r¼r6Úgo_modesr’Z undo_entryÚstartÚdiffÚdiffsqÚnhopsÚdeltarr2r¬r¬r­r3H sR    (*          zRawTurtle._gotocsÐ|\}}}}|\}}}} |\} } } ‰|j‰t|j|ƒdkrbtdƒ| |_| |_| ddgkr�d} n|} ˆj| | d| d|ƒ‡‡fdd†|jDƒ}x+|D]#}ˆj|ƒ|jj |ƒq×W|}|j r&ˆj d kr&||}|dˆj d |d ˆj d }d t|dd d |j |j ƒ}|d |}xxtd |ƒD]g}|d kr±d}nd}||||_|róˆj|j||jf|||ƒ|jƒq–W|r&ˆj|jdddd|ƒ||_|jr{t|jƒdkrZ|jjƒ|jgkr{d|_d|_| rÂ|jgkr¦d|_tdƒn|jdk rÂ|jjƒ|jƒdS)Ngà?z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!rr¯rrzcs7g|]-}|ˆkrˆj|ƒdkr|‘qS)r©)r^)r_r`)rØr’r¬r­ra� s z'RawTurtle._undogoto..r»rÄr�gš™™™™™ñ?gð?TFzUnwahrscheinlich in _undogoto!)rr)rr©rr©rr)r�rž)r’r7r,r¢rlrmr6rØr9r#rNr r'r(r¥rbrfr:rhrcrgr�rj)r¼ÚentryÚoldÚnewr—ZcoodataZdrawingZpcZpsrBZcLIZcLrdZusepcZtodeleter`r˜r™ršr›rœrr2r¬)rØr’r­Ú _undogoto} sb        (*              zRawTurtle._undogotocCsí|jr%|jjd||jfƒ||j9}|jj|ƒ}|jj}|dkrÖ|jdkrÖd|j}dtt |ƒ|ƒ}d||}x3t |ƒD]%}|jj|ƒ|_|j ƒq­W||_|j ƒdS)NÚrotr»rg@gð?) r+r€r0r.rÍr’r rNr¥r7rbr:)r¼rÊZ neworientr!Zanglevelr@rœrßr¬r¬r­r5¾ s     zRawTurtle._rotateTcCs�t|jƒdkrb|jj|j|j|j|jƒ|jjƒ|_|jj |jƒn|jj|jddƒg|_|r™|j g|_dS)Nr»r2T) rcrmr’r6rlrKrIr5rØr-r,)r¼r_r¬r¬r­r[Ð s zRawTurtle._newLinecCst|jtƒS)N)r¿rjrÓ)r¼r¬r¬r­rBà s zRawTurtle.fillingcCsz|jƒs1|jjƒ|_|jj|jƒ|jg|_|jƒ|j rl|j j d|jfƒ|j ƒdS)NÚ beginfill) rBr’r,rirØr-r,rjr[r+r€r:)r¼r¬r¬r­r1î s   zRawTurtle.begin_fillcCsƒ|jƒrt|jƒdkre|jj|j|jd|jƒ|jre|jjd|jfƒd|_|_|j ƒdS)NrÄrÚdofill) rBrcrjr’r4rirLr+r€r:)r¼r¬r¬r­r> s   zRawTurtle.end_fillc Gs³|sqt|ttfƒrF|j|ƒ}|jt|jdƒ}q¥|j}|s¥|jt|jdƒ}n4|dkr–|jt|jdƒ}|j|ƒ}t|jdƒr|jj |j ||ƒ}|j j |ƒ|j r¯|j jd|fƒn«|jƒ}|j r8|j jdgƒd|j _zQ|jƒdkrW|jƒ|jƒ|j|ƒ|j|ƒ|jdƒWd|j|ƒX|j r¯d|j _dS) Nr‡Ú_dotr<r;TrTrF)r¿rãr¶rrIr�rKÚhasattrr’r¦r,rØr-r+r€rVrrarMrXrYrWrC)r¼rqr9r8rVr¬r¬r­r< s:           z RawTurtle.dotcCs]|jj|j||||jƒ\}}|jj|ƒ|jrY|jjd|fƒ|S)NÚwri)r’rGr,rKrØr-r+r€)r¼rErFrDr8r6r¬r¬r­rGG s  zRawTurtle._writerPÚArialrŠrWcCsŠ|jr(|jjdgƒd|j_|jt|ƒ|jƒ|ƒ}|rq|jƒ\}}|j||ƒ|jr†d|j_dS)Nr;TF)r+r€rrGrãrur[re)r¼ÚargÚmoverFrDr6r¹rºr¬r¬r­r{Q s  ! zRawTurtle.writecCs|jg|_d|_dS)NT)r,rgrh)r¼r¬r¬r­r2n s zRawTurtle.begin_polycCs d|_dS)NF)rh)r¼r¬r¬r­r?| s zRawTurtle.end_polycCs |jdk rt|jƒSdS)N)rgr¶)r¼r¬r¬r­rD‰ s zRawTurtle.get_polycCs|jS)N)r’)r¼r¬r¬r­rF– szRawTurtle.getscreencCs|S)Nr¬)r¼r¬r¬r­rH¦ szRawTurtle.getturtlecCs|jj|ƒS)N)r’r)r¼rr¬r¬r­r<¾ szRawTurtle._delayr»cCs-|jj|jj|||ƒ|jƒdS)N)r’rPr�rcr:)r¼rJrrOr¬r¬r­rRà szRawTurtle.onclickcCs-|jj|jj|||ƒ|jƒdS)N)r’rQr�rcr:)r¼rJrrOr¬r¬r­rTØ szRawTurtle.onreleasecCs#|jj|jj|||ƒdS)N)r’rRr�rc)r¼rJrrOr¬r¬r­rSñ szRawTurtle.ondragcCs’|jdkrdS|dkrV|\}}|j| ||jƒ|jjƒ}n8|dkr||d}|j|ƒn|dkr˜|j|ƒnö|d krÑ|d}|jj|ƒ|jj |ƒn½|dkr |d}|jj |ddd d d ƒn…|d kra|d}d|_ |_ ||jkrŽ|jj|ƒ|jj |ƒn-|d krŽt j||dƒ|jjƒdS)Nr£rrrr“r¨r<r¥rr¯r+r¤rV)r¨r<©rr©rr©rr)r¬r­r®)r+r5r0r�r6r¢r’r9rØr#r4rirjrDrV)r¼ÚactionrxrÊZdegPAUÚdummyrŒr8r¬r¬r­Ú_undos8            zRawTurtle._undocCs–|jdkrdS|jjƒ}|d}|dd…}|dkr‚xG|r~|jƒ}|j|d|dd…ƒqKWn|j||ƒdS)Nrr»r;)r+r�r±)r¼r8r¯rxr¬r¬r­rw&s    %zRawTurtle.undo)r©rŠrW)8rÐrÑrÒrer²r÷r`rhrxrpr5rr:r>rrrsr8rkrlrnrgrtrsrmrrGr€r rrr’r6r7r3r¢r5r[rBr1r>r<rGr{r2r?rDrFrHrEr<rRrTrSr±rwrvr¬r¬r¬r­r Ð sn %          ((  (  ( -   5 A    0     cCs"tjdkrtƒt_tjS)N)r Ú_screenrdr¬r¬r¬r­r Is c@sŠeZdZdZdZedZdd„Zededededd d „Zd d „Z d d„Z dd„Z dd„Z dS)rdNr)cCsëtjdkrHtƒt_|_|jjtjƒ|jj|jƒtjdkrçtd}td}td}td}td}td}|jj ||||ƒ|jj ƒt_t j |tjƒ|j ||||ƒdS)Nrzr�r‚rƒr„r…)rdÚ_rootrr)Ú_titlerÚ_destroyrúr²rrrr÷r&)r¼rzr�r‚rƒr„r…r¬r¬r­r÷Ws      z_Screen.__init__rzr�r„r…cCsùt|jdƒsdS|jjƒ}|jjƒ}t|tƒrid|koZdknri||}|dkrƒ||d}t|tƒr¸d|ko©dknr¸||}|dkrÒ||d}|jj||||ƒ|jƒdS)Nrrr»rÄ)r§r³rrr¿r¤rr,)r¼rzr�rrr@Úshr¬r¬r­r&ms+  +  z _Screen.setupcCs,tjdk rtjj|ƒ|t_dS)N)rdr³r)r´)r¼Z titlestringr¬r¬r­r)•s z _Screen.titlecCsS|j}|tjkr<dt_dt_dt_dt_dt_|jƒdS)NF) r³rdr r r²rúrrr)r¼Úrootr¬r¬r­rµ¦s      z_Screen._destroycCs|jƒdS)N)rµ)r¼r¬r¬r­r°sz _Screen.byec s[‡fdd†}ˆj|ƒtdr-dSy tƒWntk rVtdƒYnXdS)NcsˆjƒdS)N)r)r¹rº)r¼r¬r­ÚexitGracefullyËsz+_Screen.exitonclick..exitGracefullyr“r)rRr²rÚAttributeErrorÚexit)r¼r¸r¬)r¼r­r¸s    z_Screen.exitonclick) rÐrÑrÒr³rúr²r´r÷r&r)rµrrr¬r¬r¬r­rdQs   '  rdc@s=eZdZdZdZedededdd„ZdS)r NrkrˆrŒc CsDtjdkrtƒt_tj|tjd|d|d|ƒdS)NrkrˆrŒ)r r²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 Zturtle_docstringdictc CsCi}x+tD]#}d|}t|ƒj||.zdocsdict = { r»z%s : z """%s """, z """%s """ z} rârâ) Ú_tg_screen_functionsr£Ú__doc__Ú_tg_turtle_functionsr�r"rÝr{ÚreprÚclose)r¦ÚdocsdictÚ methodnamerªr§rÝr¬r¬r­r~ìs$        c Cszdd|jƒi}t|ƒ}|j}xH|D]@}y||t|ƒ_Wq2tk rqtd|ƒYq2Xq2WdS)Nz!turtle_docstringdict_%(language)sr�zBad docstring-entry: %s)ruÚ __import__rÁr£r½r±r¢)ÚlangÚmodnameÚmodulerÁrªr¬r¬r­Úread_docstringss    rÇzCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc Cs<d}}tj|jƒ\}}}|dd…}|dd…}|jpQg}dd„|Dƒ}dgt|ƒt|ƒ|}dd„t||ƒDƒ} |dk rÒ| jd|ƒ|jd|ƒ|dk r| jd|ƒ|jd|ƒdj| ƒ}d |}dj|ƒ}d |}||fS) Nr¯r»cSsg|]}d|f‘qS)z=%rr¬)r_r«r¬r¬r­ra;s z"getmethparlist..cSs g|]\}}||‘qSr¬r¬)r_rªZdfltr¬r¬r­ra=s Ú*z**z, z(%s))ÚinspectZgetargsÚ__code__Ú __defaults__rcrˆr-r) ÚobZdefTextZcallTextr ZvarargsZvarkwZitems2ZrealArgsÚdefaultsZitems1r¬r¬r­Úgetmethparlist+s& !    rÎcCseddl}|dkrdStd}|jd|dƒ}|jd|ƒ}|jd|ƒ}|S)Nrr�z%s.r¯z \(.+ %s\):ú:)Úrer²ÚreplaceÚcompileÚsub)ÚdocstrrÐZ turtlenameÚ newdocstrÚparexpr¬r¬r­Ú_turtle_docreviseJs   r×cCseddl}|dkrdStd}|jd|dƒ}|jd|ƒ}|jd|ƒ}|S)Nrr‘z%s.r¯z \(.+ %s\):rÏ)rÐr²rÑrÒrÓ)rÔrÐZ screennamerÕrÖr¬r¬r­Ú_screen_docreviseVs   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 Cs¨x¡|D]™}t||ƒ}t|ƒ\}}|dkrMtd||ƒqtjd|d|d|d|d|ƒ} t| tƒƒ||jƒtƒ|_qWdS)Nr¯z>>>>>>ÚobjÚinitrZ paramslistZargslist)ÚgetattrrÎr¢Ú __func_bodyÚformatråÚglobalsr½) Z functionsr¸rÙrÚZ docreviserÂràZpl1Zpl2Zdefstrr¬r¬r­Ú_make_global_funcsvs  rßzTurtle._screenzScreen()z Turtle._penzTurtle()Ú__main__cCstƒrtƒntƒdS)N)rNr]rUr¬r¬r¬r­Ú switchpen‹s  rácCsÙtƒtdƒtƒtdƒtƒtdƒx‡tdƒD]y}|dkrYtƒx(tdƒD]}tdƒt dƒqfW|dkr¡t dƒt ƒtƒtd ƒtƒq@Wtd ƒt d ƒtd ƒtƒt dƒtdƒt dƒtdƒt d ƒtƒt dd ƒt dd ƒt dƒx<tdƒD].}tdƒt dƒtdƒt dƒqLWtdƒtƒx<tdƒD].}tdƒt dƒtdƒt dƒqœWt ƒdS)NTédr�rÄr‡réZZmaroonrr»rŠFé´Z startstartr˜ÚredrŒ)r`r*ryr0r=rzrbr1rCrPr9r>r_r{)r`rßr¬r¬r­Údemo1‘sX                           ræcCsFtdƒtƒtdƒttddƒƒtddƒd}tdƒx(tdƒD]}tƒt |dƒqXWt dƒxt ƒr–t ƒqƒWt ƒtdƒtd ƒd}td ƒtdƒtd ƒx¡td,d ƒD]�}|dkrtƒtd d|dd|ƒx(tdƒD]}t|ƒtdƒq(Wtƒ|d7}tdƒttƒddƒqæWtdƒtƒtdƒtdƒtƒtddƒtdƒtƒx?tdƒD]1}t ddƒtdƒtdƒtdƒqÑWtƒtdƒtƒtdƒtƒtdƒtƒ}|jdƒtƒ}|jdƒ|jdƒ|j ƒ|jdƒ|jdƒ|jƒ|jddƒ|jdƒ|jƒ|jdƒ|jddƒ|jd ƒ|jdƒtt|ƒƒd}x‹|j|ƒdkr¡|jdƒ|jdƒ|j|j|ƒƒ|jdƒ|d dkr”|j ƒ|j ƒtƒ|d7}qW|j d!d"d-d%d&ƒ|jd'ƒ|jdƒd(d)„}t!j"d ƒx!t ƒr|j ƒ|j ƒqñW|jdƒ|j d*d"d.ƒ|j#|dƒdS)/Nr»r�rg@rãér‡zwait a moment...rZgreenrärÄr…ééxé éFrråZyellowr‡é2r�rTié(r‹ZblueZorangeg @g333333ã?rzCAUGHT! rDr©ÚboldrFr_rŠcSstƒtƒdS)N)rr)r$r%r¬r¬r­Úbabaszdemo2..babaz Click me!ÚCourierrœ)r©r…rî)rðrêrî)$rprqrYrdrur;rbrbrár4r{rxrwr`rQrrWr1rAr@r>r]rUr9rkrHrar rPryrIr=rrÚtimeÚsleeprR)r?rßZlaenger`Ztrir�r‚rïr¬r¬r­Údemo2Æs°                                                    ró)EZ_verÚtkinterrõrÚrÆrñrÉrZos.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€rrrr{rr&rDr`r r r rdr r r~rÇZ _LANGUAGEÚ ImportErrorrÎr×rØrÜrßrrrÐrárærórr¬r¬r¬r­Úgsú               4 c ÿ� /&ÿÿ,ÿÿÿÍÿÿÿÿy …"               5 c