PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  mY1O@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\dadbdddedpdudxdygZdyddddddddddddddddddddjddVdd@dd`dddddddddd(dddiZddZddZyeeWnek r!edYnXGdddeZddZddZddZfddZGdddej Z!ee!ej"dGdddej#Z$ej"Z"Gddde%Z&GdddeZ'GdddeZ(Gdd d e%Z)Gddde%Z*Gddde&Z+Gddde%Z,Gddde%Z-Gddde%Z.Gdd d e-e,Z/e/Z0ddZ1Gddde+Z2Gdd d e/Z3e3Z4ddd}Z5ddZ6edZ7ye7dkre6e7Wn>e8k r:ede7Yn ek rYede7YnXddZ9ddZ:ddZ;dZ<ddZ=e=ee2dde;e=ee3dde:e>Z?e@dkrddZAddZBddZCeBeCeDdS)z-turtle 1.1b- - for Python 3.1 - 4. 5. 2009N)isfilesplitjoin)deepcopy) simpledialogScrolledCanvas TurtleScreenScreen RawTurtleTurtleRawPenPenShapeVec2Daddshapebgcolorbgpicbye clearscreen colormodedelay exitonclick getcanvas getshapeslistenmainloopmodenuminputonkey onkeypress onkeyrelease onscreenclickontimerregister_shape resetscreen screensizesetupsetworldcoordinates textinputtitletracerturtlesupdate window_height window_widthbackbackward begin_fill begin_polybkcircleclear clearstamp clearstampsclonecolordegreesdistancedotdownend_fillend_polyfd fillcolorfillingforwardget_polygetpen getscreen get_shapepoly getturtlegotoheading hideturtlehomehtisdown isvisibleleftltonclickondrag onreleasepdpenpencolorpendownpensizepenuppospositionpuradiansrightreset resizemodertseth setheadingsetpos setposition settiltangle setundobuffersetxsetyshape shapesizeshapetransform shearfactor showturtlespeedststamptilt tiltangletowards turtlesizeundoundobufferentriesupwidthwritexcorycorwrite_docstringdictdone Terminatorg?heightg? canvwidthi canvheighti, leftright topbottomstandardg? undobuffersizeiclassicblacknoresizevisibleTlanguageenglish exampleturtleturtle examplescreenscreenzPython Turtle Graphics using_IDLEFcCs't|d}|j}WdQRXi}x|D]}|j}| s2|jdr]q2y|jd\}}Wn)tk rtd||fw2YnX|j}|j}|d krt|}n@y+d |krt|}n t |}Wntk rYnX|||)TKFrame__init__winfo_toplevelZ _rootwindowrzrrrrCanvasZSUNKEN_canvasZ ScrollbarZxviewZ HORIZONTALhscrollZyviewvscrollZ configuresetZ rowconfigureZcolumnconfiguregridr`bindonResize)rZmasterrzrrrrrrrOs,  $$$ 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 scrollregionrg?) rrrrconfig xview_movetorz yview_movetor adjustScrolls)rrrrrrrr`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?rrrrrrrrrrr) r winfo_width winfo_heightrrrrrrrZ grid_forget)rcwidthcheightrrrrzs""$$ zScrolledCanvas.adjustScrollscCs|jdS)N)r)reventrrrrszScrolledCanvas.onResizecGs|jj|S)N)rbbox)rargsrrrr szScrolledCanvas.bboxcOs|jj||S)N)rcget)rr kwargsrrrrszScrolledCanvas.cgetcOs|jj||dS)N)rr)rr rrrrrszScrolledCanvas.configcOs|jj||dS)N)rr)rr rrrrrszScrolledCanvas.bindcOs|jj||dS)N)runbind)rr rrrrrszScrolledCanvas.unbindcCs|jjdS)N)r focus_force)rrrrrszScrolledCanvas.focus_force) rrrrr`rrr rrrrrrrrrrIs        rc@sdeZdZddZddZddZddZd d Zd d Zd dZ dS)_RootcCstjj|dS)N)rTkr)rrrrrsz_Root.__init__cCs8t||||||_|jjdddddS)NexpandrfillZboth)rrpack)rrzrr r rrr setupcanvassz_Root.setupcanvascCs|jS)N)r)rrrr _getcanvassz_Root._getcanvascCs!|jd||||fdS)Nz %dx%d%+d%+d)Zgeometry)rrzrstartxstartyrrr set_geometrysz_Root.set_geometrycCs|jd|dS)NZWM_DELETE_WINDOW)Z wm_protocol)rdestroyrrr ondestroysz_Root.ondestroycCs |jS)N)Zwinfo_screenwidth)rrrr win_widthsz_Root.win_widthcCs |jS)N)Zwinfo_screenheight)rrrr win_heightsz_Root.win_heightN) rrrrrrrrrrrrrrrs       rc@seZdZeddZeddZddZddZd d d d d d Zd dZ d d d d ddZ ddZ ddZ ddZ ddZd ddZddZdd ddZdd d d!Zdd d"d#Zdd d$d%Zd&d'Zd d(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zd d d d<d=Z d>d?Z!d@dAZ"dBdCZ#d d d dDdEZ$d S)FTurtleScreenBasecCs&tjdddd}|j|S)Nrzrr)r PhotoImageblank)Zimgrrr _blankimages zTurtleScreenBase._blankimagecCstjd|S)Nfile)rr!)rrrr_imageszTurtleScreenBase._imagecCs||_t|tr3|jj}|jj}nat|jjd}t|jjd}|jjd| d| d|d|df||_||_d|_|_ dS)Nrzrrrg?) cvrrrrrrrxscaleyscale)rr&whrrrrs  1  zTurtleScreenBase.__init__cCs|jjdddddS)Nrrroutline)rrrrrr)r&Zcreate_polygon)rrrr _createpolyszTurtleScreenBase._createpolyNFc Csg}x=|D]5\}} |j||j|j| |jq 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) rZpolyitem coordlistrr+rztopclrrrrr _drawpolys    zTurtleScreenBase._drawpolyc Cs.|jjdddddddddtjS)NrrrrzrZcapstyle)r&Z create_linerZROUND)rrrr _createline s$zTurtleScreenBase._createlinec Cs|dk reg}x=|D]5\}}|j||j|j| |jqW|jj|||dk r|jj|d||dk r|jj|d||r|jj|dS)Nrrz)r-r'r(r&r.r/r0) rZlineitemr1rrzr2r3rrrrr _drawlines   zTurtleScreenBase._drawlinecCs|jj|dS)N)r&delete)ritemrrr_delete)szTurtleScreenBase._deletecCs|jjdS)N)r&r,)rrrr_update/szTurtleScreenBase._updatecCs|jj|dS)N)r&after)rrrrr_delay4szTurtleScreenBase._delayc Cs>y|jj|}d}Wntjk r9d}YnX|S)NTF)r&Z winfo_rgbrZTclError)rr9Zrgbokrrr_iscolorstring8s   zTurtleScreenBase._iscolorstringcCs@|dk r,|jjd||jn|jjdSdS)Nr)r&rr:r)rr9rrr_bgcolorBs  zTurtleScreenBase._bgcolorc Cs|\}}||j}||j}ddddddi}|jj|d| d|d ||d |d |} |jj| \} } } } |jj| | dfS) NrPswcenterrr_Zsertextanchorrfont)r'r(r&Z create_textr r,)rr[txtalignrDrWrrrCr8Zx0Zy0Zx1Zy1rrr_writeKs   ' zTurtleScreenBase._writercs\dkr&jj|d|n2fdd}jj|d|||dS)Nz csKjj|jjjj|j j}}||dS)N)r&canvasxrr'canvasyrr()r rr)funrrreventfunfs!z+TurtleScreenBase._onclick..eventfun)r& tag_unbindtag_bind)rr8rJnumaddrKr)rJrr_onclick]s zTurtleScreenBase._onclickcs\dkr&jj|d|n2fdd}jj|d|||dS)NzcsKjj|jjjj|j j}}||dS)N)r&rHrr'rIrr()r rr)rJrrrrKxs!z-TurtleScreenBase._onrelease..eventfun)r&rLrM)rr8rJrNrOrKr)rJrr _onreleasels zTurtleScreenBase._onreleasecs\dkr&jj|d|n2fdd}jj|d|||dS)Nzc sdyKjj|jjjj|j j}}||Wntk r_YnXdS)N)r&rHrr'rIrr(r)r rr)rJrrrrKs ! z*TurtleScreenBase._ondrag..eventfun)r&rLrM)rr8rJrNrOrKr)rJrr_ondrags zTurtleScreenBase._ondragcsVdkr#jjd|n/fdd}jjd|||dS)Nz csKjj|jjjj|j j}}||dS)N)r&rHrr'rIrr()r rr)rJrrrrKs!z1TurtleScreenBase._onscreenclick..eventfun)r&rr)rrJrNrOrKr)rJrr_onscreenclicks zTurtleScreenBase._onscreenclickcsSdkr&|jjd|dn)fdd}|jjd||dS)Nzcs dS)Nr)r )rJrrrKsz0TurtleScreenBase._onkeyrelease..eventfun)r&rr)rrJrrKr)rJr _onkeyreleases zTurtleScreenBase._onkeyreleasecsdkrH|dkr.|jjddq|jjd|dnKfdd}|dkr||jjd|n|jjd||dS)Nz z cs dS)Nr)r )rJrrrKsz.TurtleScreenBase._onkeypress..eventfun)r&rr)rrJrrKr)rJr _onkeypresss   zTurtleScreenBase._onkeypresscCs|jjdS)N)r&r)rrrr_listenszTurtleScreenBase._listencCs6|dkr|jj|n|jj||dS)Nr)r&Z after_idler;)rrJtrrr_ontimers zTurtleScreenBase._ontimercCs|jjddd|S)Nrimage)r&Z create_image)rrYrrr _createimageszTurtleScreenBase._createimagecCsN|\}}|jj|||j| |jf|jj|d|dS)NrY)r&r.r'r( itemconfig)rr8r[rYrrrrr _drawimages (zTurtleScreenBase._drawimagecCs*|jj|d||jj|dS)NrY)r&r[Z tag_lower)rr8rYrrr _setbgpicszTurtleScreenBase._setbgpiccCs|jj|S)N)r&r)rr8rrr_typeszTurtleScreenBase._typecsA|jj|fddtdtdD}|S)Ncs)g|]}||d fqS)rr).0i)r3rr s z/TurtleScreenBase._pointlist..rr)r&r.rangelen)rr8plr)r3r _pointlists+zTurtleScreenBase._pointlistcCs#|jjd||||fdS)Nr)r&r)rsrx1sry1srx2sry2rrr_setscrollregionsz!TurtleScreenBase._setscrollregionc Cs|jj}x|D]}t|jj|}g}xR|r|dd\}}|j|||j|||dd}q=W|jj||qWdS)Nr)r&Zfind_allrr.r-) rZ xscalefactorZ yscalefactorrr8Z coordinatesZ newcoordlistrrrrr_rescales  zTurtleScreenBase._rescalecCst|jts"|j|jfS||koD|koDdknr_|jj|jjfS|dk rt||_|dk r||_|jj|||dS)N)rr&rrrr`)rrrrrrr_resizes'    zTurtleScreenBase._resizecCsZ|jj}|dkr(|jd}|jj}|dkrP|jd}||fS)Nrrzr)r&rr)rrzrrrr _window_sizes    zTurtleScreenBase._window_sizecCstjdS)N)rr)rrrrr s zTurtleScreenBase.mainloopcCstj||S)N)rZ askstring)rr)promptrrrr(/s zTurtleScreenBase.textinputc Cs"tj||d|d|d|S)NZ initialvalueZminvaluemaxvalue)rZaskfloat)rr)rndefaultZminvalZmaxvalrrrr>szTurtleScreenBase.numinput)%rrr staticmethodr#r%rr,r4r5r6r9r:r<r>r?rGrPrQrRrSrTrUrVrXrZr\r]r^rerjrkrlrmrr(rrrrrr sF                   r c@seZdZdS)rN)rrrrrrrrYs c@seZdZdS)TurtleGraphicsErrorN)rrrrrrrrrbs rrc@s.eZdZdddZdddZdS)rNcCs||_|dkr3t|trt|}ns|dkrt|tr|jjdrt|rtj |}n%|dkrg}nt d|||_ dS)NpolygonrYz.gifcompoundzThere is no shape type %s) r^rrrrlowerendswithrrr%rr_data)rZtype_datarrrrns   !  zShape.__init__cCsQ|jdkr"td|j|dkr4|}|jj|||gdS)Nrtz Cannot add component to %s Shape)r^rrrwr-)rpolyrr+rrr addcomponent~s   zShape.addcomponent)rrrrrzrrrrrgs c@s^eZdZdddZdddZddZd d Zd d Zd dZdS)TbufferrcCs2||_dgg||_d|_d|_dS)NrFr)bufsizebufferptrcumulate)rr|rrrrs  zTbuffer.__init__NcCsb|dkr9xFt|jD]}dg|j|.zbad color sequence: %sz #%02x%02x%02x)rcrrr>rr TypeErrorrr)rr9rgbrrr _colorstrvs  %TzTurtleScreen._colorstrcsjdsStdkrAfddd D}nHtdkryfd dddD}ntd tfd d|DS) Nrrcs-g|]#}t||ddqS)rr)r)r_r`)cstrrrras z'TurtleScreen._color..rrrrcs'g|]}dt|dqS)r)r)r_r*)rrrras zbad colorstring: %scs!g|]}|jdqS)r)r)r_r)rrrras )rrr)rrcrrr)rrr3r)rrr_colors&zTurtleScreen._colorcCsP|dkr|jS|dkr1t||_n|dkrLt||_dS)Ng?r)rrr)rZcmoderrrrs    zTurtleScreen.colormodecCs2x+|jD] }|j|j|jq WdS)N)r _setmoderr`)rrrrrr`szTurtleScreen.resetcCs|jS)N)r )rrrrr+szTurtleScreen.turtlescGsL|r|j|}nd}|j|}|dk rH|j|}|S)N)rr?r)rr r9rrrrs zTurtleScreen.bgcolorcCs]|dkr|jSt||_d|_|dk rFt||_|jrY|jdS)Nr)r rr rr,)rnrrrrr*s    zTurtleScreen.tracercCs&|dkr|jSt||_dS)N)rr)rrrrrrs zTurtleScreen.delaycCsLtjsdt_t|jdkrH|jd7_|j|j;_dS)NTrr)r_RUNNINGrr r )rrrr _incrementudcs   zTurtleScreen._incrementudccCsT|j}d|_x(|jD]}|j|jqW||_|jdS)NT)r r+ _update_data _drawturtler:)rtracingrWrrrr,s    zTurtleScreen.updatecCs|jdS)Nr)rm)rrrrr.szTurtleScreen.window_widthcCs|jdS)Nr)rm)rrrrr-%szTurtleScreen.window_heightcCs|jS)N)r&)rrrrr.s zTurtleScreen.getcanvascCst|jjS)N)sortedrr)rrrrr:s zTurtleScreen.getshapesrcCs|j|||dS)N)rS)rrJrrOrrrrREszTurtleScreen.onclickcCsa|dkr.||jkrM|jj|n||jkrM|jj||j||dS)N)rremover-rT)rrJrrrrrVs  zTurtleScreen.onkeycCsm|dkr.||jkrY|jj|n+|dk rY||jkrY|jj||j||dS)N)rr#r-rU)rrJrrrrrts  zTurtleScreen.onkeypresscCs|jdS)N)rV)rxdummyydummyrrrrs zTurtleScreen.listenrcCs|j||dS)N)rX)rrJrWrrrr"szTurtleScreen.ontimercCs_|dkr|jS||jkr8|j||j|<|j|j|j|||_dS)N)r rr%r]r)rZpicnamerrrrs  zTurtleScreen.bgpiccCs|j|||S)N)rl)rrrrrrrr%szTurtleScreen.screensize)$rrrrrrr5rr'r#rrrr`r+rr*rrr,r.r-rrrRrrrr"rr%r!r$rrr rrrrrsB & " '#       c@seZdZdedddedddeddiZdZdZdZedd Zd d Z d d dZ ddZ dddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd d*d+Zd,d-Zd.d/Zd0d1Zd d2d3Zd d4d5Zd6d7Zd8d9Zd d d:d;Z dd<d=Z!d d d>d?Z"d d@dAZ#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,d S)B TNavigatorrg?grrrrcCs[|j|_|j|_||_d|_|jd|_|j|tj |dS)N) DEFAULT_ANGLEOFFSET _angleOffsetDEFAULT_ANGLEORIENT _angleOrientr undobufferr:rr&r`)rrrrrrs       zTNavigator.__init__cCs)tdd|_tj|j|_dS)Ng)r _positionr&START_ORIENTATIONr_orient)rrrrr`szTNavigator.resetNcCsj|dkr|jS|dkr#dS||_|dkrMd|_d|_n|jd|_d |_dS) Nrrrrrg@)rrr)rrr)rr(r* _fullcircle)rrrrrrs      zTNavigator._setmodecCsB||_d||_|jdkr1d|_n |d|_dS)Nihrrg@)r/ _degreesPerAUrr()r fullcirclerrr_setDegreesPerAUs    zTNavigator._setDegreesPerAUgv@cCs|j|dS)N)r2)rr1rrrr:szTNavigator.degreescCs|jdtjdS)Nr)r2rr)rrrrr^4s zTNavigator.radianscCs%|j|j|}|j|dS)N)r,r._goto)rr;Zenderrr_goBszTNavigator._gocCs&||j9}|jj||_dS)N)r0r.r)rrrrr_rotateGs zTNavigator._rotatecCs ||_dS)N)r,)rendrrrr3LszTNavigator._gotocCs|j|dS)N)r4)rr;rrrrCPszTNavigator.forwardcCs|j| dS)N)r4)rr;rrrr/gszTNavigator.backcCs|j| dS)N)r5)rrrrrr_{szTNavigator.rightcCs|j|dS)N)r5)rrrrrrPszTNavigator.leftcCs|jS)N)r,)rrrrr[s zTNavigator.poscCs |jdS)Nr)r,)rrrrr|s zTNavigator.xcorcCs |jdS)Nr)r,)rrrrr}s zTNavigator.ycorcCs<|dkr"|jt|n|jt||dS)N)r3r)rrrrrrrIs zTNavigator.gotocCs!|jdd|jddS)Nr)rIrd)rrrrrLs zTNavigator.homecCs!|jt||jddS)Nr)r3rr,)rrrrrriszTNavigator.setxcCs!|jt|jd|dS)Nr)r3rr,)rrrrrrjszTNavigator.setycCsz|dk rt||}t|tr3|}n6t|trQt|}nt|tri|j}t||jS)N)rrrr&r,abs)rrrr[rrrr;$s   zTNavigator.distancecCs|dk rt||}t|tr3|}n6t|trQt|}nt|tri|j}||j\}}ttj||dtjdd}||j }|j |j ||j S)Ngf@rgv@) rrrr&r,rratan2rr0r(r*r/)rrrr[resultrrrruDs   * zTNavigator.towardscCs_|j\}}ttj||dtjdd}||j}|j|j||jS)Ngf@rgv@) r.rrr8rr0r(r*r/)rrrr9rrrrJgs * zTNavigator.headingcCsK||j|j}|j}||d||d}|j|dS)Ng@)rJr*r/r5)rZto_anglerfullrrrrdvs zTNavigator.setheadingc Cs|jr(|jjdgd|j_|j}|dkrI|j}|dkrt||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||jrd |j_dS) NseqTr g@gM@g?g?g@gf@rF)r+rrrpr/r7rminrrrr0_tracerr<r5rbr4) rradiusZextentstepsrpZfracr)Zw2ltrZdlr`rrrr4s>      + )            zTNavigator.circlecCsdS)Nr)rrrrrrpszTNavigator.speedcCsdS)Nr)rarrrrr>szTNavigator._tracercCsdS)Nr)rrrrrr<szTNavigator._delay)-rrrrr-Z DEFAULT_MODEr'r)rr`rr2r:r^r4r5r3rCr/r_rPr[r|r}rIrLrirjr;rurJrdr4rpr>r<r@r3r0rbrQr\rerfrcrrrrr&sV             #    #  Ar&c@sHeZdZedddZededddZdd d Zdd d Zd dZddZ ddZ dddZ ddZ ddZ ddZddZddZdd Zdd!d"Zd#d$d%Zd#d&d'd(Zd)d*Zd+d,ZeZeZeZe Ze ZeZeZdS)-TPenracCs#||_d|_tj|dS)N) _resizemoder+rD_reset)rrarrrrs  z TPen.__init__rWrAcCsgd|_d|_||_||_d|_d|_d|_d|_d|_d|_ d|_ dS)NrTr?)rGrG)rGrHrHrG) _pensize_shown _pencolor _fillcolor_drawing_speed_stretchfactor _shearfactor_tilt _shapetrafo _outlinewidth)rrWrArrrrFs          z TPen._resetNcCs?|dkr|jS|j}|dkr;|jd|dS)Nautouserrra)rTrUr)rErurV)rZrmoderrrras    zTPen.resizemodecCs'|dkr|jS|jd|dS)NrY)rIrV)rrzrrrrYs z TPen.pensizecCs!|js dS|jdddS)NrXF)rMrV)rrrrrZ/s z TPen.penupcCs!|jr dS|jdddS)NrXT)rMrV)rrrrrX=s z TPen.pendowncCs|jS)N)rM)rrrrrNKs z TPen.isdownc Csddddddddd d i}|dkr7|jS||krP||}n7d |kogd knrtt|}nd}|jd |dS)NZfastestrfastrnormalrZslowrZslowestrg?g%@rp)rNrrrV)rrpZspeedsrrrrpZs$   z TPen.speedcGs|rt|}|dkr/|d}}n1|dkrJ|\}}n|dkr`|}}|j|}|j|}|jd|d|n"|j|j|j|jfSdS)NrrrrrWrA)rcrrVrrKrL)rr rAZpcolorZfcolorrrrr9s      z TPen.colorcGsO|r;|j|}||jkr(dS|jd|n|j|jSdS)NrW)rrKrVr)rr r9rrrrWs z TPen.pencolorcGsO|r;|j|}||jkr(dS|jd|n|j|jSdS)NrA)rrLrVr)rr r9rrrrAs zTPen.fillcolorcCs|jdddS)NshownT)rV)rrrrros zTPen.showturtlecCs|jdddS)NrXF)rV)rrrrrK szTPen.hideturtlecCs|jS)N)rJ)rrrrrO s zTPen.isvisiblecKsd|jd|jd|jd|jd|jd|jd|jd|jd |jd |j d |j i }|pr|sy|St |t r|}ni}|j |i}x|D]}||||.)rYrs) rrbr^rr9_itemr,rZrw)rrbr8r)rrra s&  ))z_TurtleImage._setshapeN)rrrrrarrrrr` s  r`c@seZdZgZdedededddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddddZ ddZddZddZddZddd Zdddd!d"Zdd#d$Zd%d&Zdd'd(Zd)d*Zddddd+d,Zd-d.Zd/d0Zd1d2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdd<d=Z d>d?Z!d@dAZ"dBdCZ#dDdEdFZ$dGdHZ%dIdJZ&dKdLZ'ddMdNZ(dOdPZ)d1dQdndUdVZ*dWdXZ+dYdZZ,d[d\Z-d]d^Z.d_d`Z/e/Z0ddadbZ1dcddddeZ2dcddfdgZ3dcddhdiZ4djdkZ5dldmZ6eZ7dS)or NrkrrcCst|tr||_nt|trU|tjkrItjj|||_nwt|ttfrx_tjD]}|j |krt||_PqtWt||_tjj|jnt 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_Screenrrr screensr-rrr&rrr&rrrDr r5drawingLineItemr`r_poly _creatingPoly _fillitem _fillpathrJ_hidden_from_screencurrentLineItemr, currentLiner stampItems_undobuffersizer{r+r:)rZcanvasrkrrrrrrr s@           zRawTurtle.__init__cCs<tj|tj||j|j|jdS)N)r&r`rDrF_clearr r:)rrrrr` s     zRawTurtle.resetcCs7|dks|dkr$d|_nt||_dS)Nr)r+r{)rsizerrrrh s zRawTurtle.setundobuffercCs |jdkrdS|jjS)Nr)r+r)rrrrrx+ s zRawTurtle.undobufferentriescCsd|_|_x!|jD]}|jj|qW|jj|_g|_|jrk|jj |j |jg|_|j |j |j dS)N)rirjrrr9r5rlrmrMr-r,r7rhro)rr8rrrrp8 s   zRawTurtle._clearcCs|j|jdS)N)rpr:)rrrrr5F s zRawTurtle.clearcCsa|jj|jjdkr#dSt|jdkr]|jj|j|j|j|jdS)Nrr) rrr rcrmr6rlrKrI)rrrrrU s  zRawTurtle._update_datacCs|j}|jdkrdS|jdkr\|j|j|j|j|jnD|j|jdkrx|jD]}|jqW|jdS)Nrr) rr rr r:r<rr r+)rrrWrrrr:] s     zRawTurtle._updatecCs|jj||S)N)rr*)rflagrrrrr>o szRawTurtle._tracercCs|jj|S)N)rr)rr rrrr szRawTurtle._colorcCs|jj|S)N)rr)rr rrrr szRawTurtle._colorstrc Cs t|tr|Sy|\}}}Wn.ttfk rVtdt|YnX|jjdkrdd|||fD\}}}d|kodknod|kodknod|kodknstdt|d|||fS) Nzbad color arguments: %sg?cSs g|]}td|qS)go@)r)r_rrrrra s z!RawTurtle._cc..rrzbad color sequence: %sz #%02x%02x%02x)rrrrrrrr)rr rrrrrr_cc s%Tz RawTurtle._cccs@|j|j|j|j}d|_d|_t|}|_||_|_t|jj|_jj|j |jjj }|dkrj |j_ ni|dkrj j dj|j_ n;|dkr#fddj |jjjD|j_ j|_|j|S)NrsrYr"rtcsg|]}jqSr)r,)r_r8)rrrra s z#RawTurtle.clone..)rr[rMrrr`rbr r-rr^r,rcrZrwr5rlr:)rrqttyper)rrr8 s,          "   zRawTurtle.clonecCsY|dkr|jjS||jjkr;td||jj||jdS)NzThere is no shape named %s)rrbrrrrrar:)rrrrrrk 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)rZ stretch_widZ stretch_lenr+rYrrrrl s '       zRawTurtle.shapesizecCs-|dkr|jS|jddd|dS)NrarUrn)rPrV)rZshearrrrrn s zRawTurtle.shearfactorcCsK| |j|j}|tjddtj}|jddd|dS)Ngf@rrarUrs)r0r*rrrV)rrrsrrrrg szRawTurtle.settiltanglecCsK|dkr:|j dtj|j}||j|jS|j|dS)Ngf@)rQrrr*r0r/rg)rrrsrrrrt3 s zRawTurtle.tiltanglecCs|j||jdS)N)rgrt)rrrrrrsM szRawTurtle.tiltcCs||ko-|ko-|ko-dknr9|jS|j\}}}}|dk r`|}|dk rr|}|dk r|}|dk r|}||||dkrtd||||f|_tj| |dtj} tj| tj| } } | || || || || || || || |f\} } }}| |f|_| ||_| |_ |j dddS)Nrz0Bad shape transform matrix: must not be singularrrarU) rRrrrr8rrrrOrPrQrV)rt11t12t21t22Zm11Zm12Zm21Zm22Zalfar]r^Za11Za12Za21Za22rrrrm` s,2     0  zRawTurtle.shapetransformcs|j|j\|j\tjj}dt||\fdd|DS)Ng?csQg|]G\}}||j ||jfqSr)r'r()r_rr)e0e1p0p1rrrra s z(RawTurtle._polytrafo..)rr,r.rr(r'r7)rryer)rzr{r|r}rr _polytrafo s zRawTurtle._polytrafocCsE|jj|jj}|jdkrA|j|j|jdkSdS)Nrsrt)rrrrbr^ _getshapepolyrw)rrkrrrrG s zRawTurtle.get_shapepolyFcs|jdks|r-|j\nY|jdkrstd|jd}|dd|f\n|jdkr|Stfdd|DS) NrUrTrg@rrcs:g|]0\}}||||fqSrr)r_rr)rvrwrxryrrra s z+RawTurtle._getshapepoly..)rErRmaxrIr)rrsrtrAr)rvrwrxryrr s!zRawTurtle._getshapepolyc Cs^|j}|j|jj}|j}|jj}|jr|jdkr|jdkrd|_ |j }|dkr|j dkrd}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 rdS|dkr|j|dddnb|d kr|j||j|jdj n3|d krQx$|D]} |j| dddq1Wd |_ dS)NrFrsrrrTrr+rzr2TrYrtrr"rrrrrr)rrrrrrrrr)rrr)rrrrbr^rcrJr r rkrwrErIrSrrrLrKr4r\r,ziprs) rrrkruZtitemtshaper)fcocr8ryrrrr  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 krg}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)NrsrrrTrr+rzr2TrYrrtrr)rrrrbr^rwr,rErIrSrrrLrKr4rZr\r,r-rrrsrnr+r) rrrkrurstitemr)rrelementr8ryrrrrr s>             %#zRawTurtle.stampcCs||jkrbt|trBx1|D]}|jj|q%Wn|jj||jj|d|f}|j}||jkrdS|jj|}|jj|||j kr|j d|j |_ |jj |j d|j dgdS)Nrrr) rnrrrr9r#r+r}indexr~r|insert)rstampidZsubitemr8bufrrrr _clearstamp s   zRawTurtle._clearstampcCs|j||jdS)N)rr:)rrrrrr6 s zRawTurtle.clearstampcCs|dkr"|jdd}n5|dkrD|jd|}n|j|d}x|D]}|j|q^W|jdS)Nr)rnrr:)rrZtoDeleter8rrrr7, s   zRawTurtle.clearstampsc CsZ|j|j|jt|jtf}|j}d|j|||j|j dd|j |j|j ddff}|j r|j j ||j}|jr|jdkr||}|d|jd|d|jd}dt|ddd|j|j}|d|} xtd|D]p} | dkrLd } nd } || | |_|jr|j|j||jf|j|j| |jq1W|jr|j|jdd d d |j|jr|j j|t|jtr |jj|||_|jr-|jj|t|j dkrL|j|jdS)Ngorrrg?rg?g?TFrrrz*rrrr)rr)rMrKrIrrjrrr,rlrmrerr+rrNr r'r(rrbr6rfr:r-rhrgrcr[) rr6go_modesrZ undo_entrystartdiffdiffsqnhopsdeltarr2rrrr3H sR    (*          zRawTurtle._gotocs|\}}}}|\}}}} |\} } } |jt|j|dkrbtd| |_| |_| ddgkrd} n|} j| | d| d|fdd|jD}x+|D]#}j||jj |qW|}|j r&j d kr&||}|dj d |d j d }d t|dd d |j |j }|d |}xxtd |D]g}|d krd}nd}||||_|rj|j||jf||||jqW|r&j|jdddd|||_|jr{t|jdkrZ|jj|jgkr{d|_d|_| r|jgkrd|_tdn|jdk r|jj|jdS)Ng?z$undogoto: HALLO-DA-STIMMT-WAS-NICHT!rrrrzcs7g|]-}|krj|dkr|qS)r)r^)r_r`)rrrrra s z'RawTurtle._undogoto..rrrg?g?TFzUnwahrscheinlich in _undogoto!)rr)rrrrrr)rr)rr7r,rrlrmr6rr9r#rNr r'r(rrbrfr:rhrcrgrrj)rentryoldnewrZcoodataZdrawingZpcZpsrBZcLIZcLrdZusepcZtodeleter`rrrrrrr2r)rrr _undogoto} sb        (*              zRawTurtle._undogotocCs|jr%|jjd||jf||j9}|jj|}|jj}|dkr|jdkrd|j}dtt ||}d||}x3t |D]%}|jj||_|j qW||_|j dS)Nrotrrg@g?) r+rr0r.rrr rNrr7rbr:)rrZ neworientr!Zanglevelr@rrrrrr5 s     zRawTurtle._rotateTcCst|jdkrb|jj|j|j|j|j|jj|_|jj |jn|jj|jddg|_|r|j g|_dS)Nrr2T) rcrmrr6rlrKrIr5rr-r,)rr_rrrr[ s zRawTurtle._newLinecCst|jtS)N)rrjr)rrrrrB s zRawTurtle.fillingcCsz|js1|jj|_|jj|j|jg|_|j|j rl|j j d|jf|j dS)N beginfill) rBrr,rirr-r,rjr[r+rr:)rrrrr1 s   zRawTurtle.begin_fillcCs|jrt|jdkre|jj|j|jd|j|jre|jjd|jfd|_|_|j dS)Nrrdofill) rBrcrjrr4rirLr+rr:)rrrrr> s   zRawTurtle.end_fillc Gs|sqt|ttfrF|j|}|jt|jd}q|j}|s|jt|jd}n4|dkr|jt|jd}|j|}t|jdr|jj |j ||}|j j ||j r|j jd|fn|j}|j r8|j jdgd|j _zQ|jdkrW|j|j|j||j||jdWd|j|X|j rd|j _dS) Nr_dotr<r;TrTrF)rrrrrIrrKhasattrrrr,rr-r+rrVrrarMrXrYrWrC)rrqr9r8rVrrrr< s:           z RawTurtle.dotcCs]|jj|j||||j\}}|jj||jrY|jjd|f|S)Nwri)rrGr,rKrr-r+r)rrErFrDr8r6rrrrGG s  zRawTurtle._writerPArialrrWcCs|jr(|jjdgd|j_|jt||j|}|rq|j\}}|j|||jrd|j_dS)Nr;TF)r+rrrGrrur[re)rargmoverFrDr6rrrrrr{Q s  ! zRawTurtle.writecCs|jg|_d|_dS)NT)r,rgrh)rrrrr2n s zRawTurtle.begin_polycCs d|_dS)NF)rh)rrrrr?| s zRawTurtle.end_polycCs |jdk rt|jSdS)N)rgr)rrrrrD s zRawTurtle.get_polycCs|jS)N)r)rrrrrF szRawTurtle.getscreencCs|S)Nr)rrrrrH szRawTurtle.getturtlecCs|jj|S)N)rr)rrrrrr< szRawTurtle._delayrcCs-|jj|jj||||jdS)N)rrPrrcr:)rrJrrOrrrrR szRawTurtle.onclickcCs-|jj|jj||||jdS)N)rrQrrcr:)rrJrrOrrrrT szRawTurtle.onreleasecCs#|jj|jj|||dS)N)rrRrrc)rrJrrOrrrrS 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 krt j||d|jjdS)Nrrrrrrr<rrrr+rrV)rr<rrrrrr)rrr)r+r5r0rr6rrr9rr#r4rirjrDrV)ractionrxrZdegPAUdummyrr8rrr_undos8            zRawTurtle._undocCs|jdkrdS|jj}|d}|dd}|dkrxG|r~|j}|j|d|ddqKWn|j||dS)Nrrr;)r+rr)rr8rrxrrrrw&s    %zRawTurtle.undo)rrrW)8rrrrerrr`rhrxrpr5rr:r>rrrsr8rkrlrnrgrtrsrmrrGrr rrrr6r7r3rr5r[rBr1r>r<rGr{r2r?rDrFrHrEr<rRrTrSrrwrvrrrrr sn %          ((  (  ( -   5 A    0     cCs"tjdkrtt_tjS)N)r _screenrdrrrrr Is c@seZdZdZdZedZddZededededd d Zd d Z d dZ ddZ ddZ dS)rdNr)cCstjdkrHtt_|_|jjtj|jj|jtjdkrtd}td}td}td}td}td}|jj |||||jj t_t j |tj|j ||||dS)Nrzrrrrr)rd_rootrr)_titler_destroyrrrrrrr&)rrzrrrrrrrrrWs      z_Screen.__init__rzrrrcCst|jdsdS|jj}|jj}t|trid|koZdknri||}|dkr||d}t|trd|kodknr||}|dkr||d}|jj|||||jdS)Nrrrr)rrrrrrrr,)rrzrrrr@shrrrr&ms+  +  z _Screen.setupcCs,tjdk rtjj||t_dS)N)rdrr)r)rZ titlestringrrrr)s z _Screen.titlecCsS|j}|tjkr<dt_dt_dt_dt_dt_|jdS)NF) rrdr r rrrrr)rrootrrrrs      z_Screen._destroycCs|jdS)N)r)rrrrrsz _Screen.byec s[fdd}j|tdr-dSy tWntk rVtdYnXdS)NcsjdS)N)r)rr)rrrexitGracefullysz+_Screen.exitonclick..exitGracefullyrr)rRrrAttributeErrorexit)rrr)rrrs    z_Screen.exitonclick) rrrrrrrrr&r)rrrrrrrrdQs   '  rdc@s=eZdZdZdZedededddZdS)r Nrkrrc CsDtjdkrtt_tj|tjd|d|d|dS)Nrkrr)r rr r r)rrkrrrrrrs  zTurtle.__init__)rrrr rrrrrrrr s Zturtle_docstringdictc CsCi}x+tD]#}d|}t|j||.zdocsdict = { rz%s : z """%s """, z """%s """ z} rr) _tg_screen_functionsr__doc___tg_turtle_functionsrr"rr{reprclose)rdocsdict methodnamerrrrrrr~s$        c Cszdd|ji}t|}|j}xH|D]@}y||t|_Wq2tk rqtd|Yq2Xq2WdS)Nz!turtle_docstringdict_%(language)srzBad docstring-entry: %s)ru __import__rrrrr)langmodnamemodulerrrrrread_docstringss    rzCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc Cs<d}}tj|j\}}}|dd}|dd}|jpQg}dd|D}dgt|t||}ddt||D} |dk r| jd||jd||dk r| jd||jd|dj| }d |}dj|}d |}||fS) NrrcSsg|]}d|fqS)z=%rr)r_rrrrra;s z"getmethparlist..cSs g|]\}}||qSrr)r_rZdfltrrrra=s *z**z, z(%s))inspectZgetargs__code__ __defaults__rcrr-r) obZdefTextZcallTextr ZvarargsZvarkwZitems2ZrealArgsdefaultsZitems1rrrgetmethparlist+s& !    rcCseddl}|dkrdStd}|jd|d}|jd|}|jd|}|S)Nrrz%s.rz \(.+ %s\)::)rerreplacecompilesub)docstrrZ turtlename newdocstrparexprrr_turtle_docreviseJs   rcCseddl}|dkrdStd}|jd|d}|jd|}|jd|}|S)Nrrz%s.rz \(.+ %s\):r)rrrrr)rrZ screennamerrrrr_screen_docreviseVs   rardef {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 Csx|D]}t||}t|\}}|dkrMtd||qtjd|d|d|d|d|} t| t||jt|_qWdS)Nrz>>>>>>objinitrZ paramslistZargslist)getattrrr __func_bodyformatrglobalsr) Z functionsrrrZ docreviserrZpl1Zpl2Zdefstrrrr_make_global_funcsvs  rzTurtle._screenzScreen()z Turtle._penzTurtle()__main__cCstrtntdS)N)rNr]rUrrrr switchpens  rcCsttdttdttdxtdD]y}|dkrYtx(tdD]}tdt dqfW|dkrt dt ttd tq@Wtd t d td tt dtdt dtdt d tt dd t dd t dx<tdD].}tdt dtdt dqLWtdtx<tdD].}tdt dtdt dqWt dS)NTdrrrrZZmaroonrrrFZ startstartrredr)r`r*ryr0r=rzrbr1rCrPr9r>r_r{)r`rrrrdemo1sX                           rcCsFtdttdttddtddd}tdx(tdD]}tt |dqXWt dxt rt qWt tdtd d}td tdtd xtd,d D]}|dkrttd d|dd|x(tdD]}t|tdq(Wt|d7}tdttddqWtdttdtdttddtdtx?tdD]1}t ddtdtdtdqWttdttdttdt}|jdt}|jd|jd|j |jd|jd|j|jdd|jd|j|jd|jdd|jd |jdtt|d}x|j|dkr|jd|jd|j|j||jd|d dkr|j |j t|d7}qW|j d!d"d-d%d&|jd'|jdd(d)}t!j"d x!t r|j |j qW|jd|j d*d"d.|j#|ddS)/Nrrrg@rrzwait a moment...rZgreenrrrx FrrZyellowr2rrTi(rZblueZorangeg @g333333?rzCAUGHT! rDrboldrFr_rcSsttdS)N)rr)r$r%rrrbabaszdemo2..babaz Click me!Courierr)rrr)rrr)$rprqrYrdrur;rbrbrr4r{rxrwr`rQrrWr1rAr@r>r]rUr9rkrHrar rPryrIr=rrtimesleeprR)r?rZlaenger`Ztrirrrrrrdemo2s                                                    r)EZ_vertkinterrrrrrrZos.pathrrrcopyrrZ _tg_classesrrZ _tg_utilities__all__rrrrrrrrrrrrrrrrrobjectr rrrrr{rr&rDr`r r r rdr r r~rZ _LANGUAGE ImportErrorrrrrrrrrrrrrrrrrgs               4 c  /&,y "               5 c