U e5dd1O@s2dZddlZddlZddlZddlZddlZddlZddlm 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;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|gOZd}d~gZeeeedgZdd/d2d?dLdPdTdZd\dadbdddedpdudxdygZdddddddddddddddddddddZddZddZz eeWnek redYnXGdddeZddZddZdZdddZGdddej 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}Z5ddZ6edZ7ze7dkrne6e7Wn@e8k rede7Yn"ek rede7YnXddZ9dd„Z:ddĄZ;dZZ?e@dkr.dd΄ZAddЄZBdd҄ZCeBeCeDdS)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 Terminator?g?ii,standard? iclassicblacknoresizeTZenglishturtlescreenzPython Turtle GraphicsF)rzheight canvwidth canvheight leftright topbottomrrrundobuffersizerkrWrAravisiblelanguage exampleturtle examplescreenr) using_IDLEc Cst|d}|}W5QRXi}|D]}|}|r&|drBq&z|d\}}Wn(tk r|td||fYq&YnX|}|}|dkrt|}n4zd|krt|}nt |}Wntk rYnX|||<q&|S)Nr#=zBad line in config-file %s: %s)TrueFalseNonez''z"".) open readlinesstrip startswithr ValueErrorprintevalfloatint)filenamefZcfglinescfgdictlinekeyvaluer/usr/lib64/python3.8/turtle.py config_dicts0      rcCsd}i}i}t|rt|}d|kr0d|d}ztt\}}t||}Wntk rbd}YnXt|rtt|}t|t|dS)Nz turtle.cfgZ importconfigz turtle_%s.cfg)rrr__file__r Exception_CFGr,)rZ default_cfgZcfgdict1Zcfgdict2headtailZ cfg_file2rrr readconfigs     rz"No configfile read, reason unknownc@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)rcCst|||fSN)tuple__new__)clsxyrrrrsz Vec2D.__new__cCs"t|d|d|d|dSNrrselfotherrrr__add__sz Vec2D.__add__cCsDt|tr*|d|d|d|dSt|d||d|Sr) isinstancerrrrr__mul__s  z Vec2D.__mul__cCs2t|tst|tr.t|d||d|StSr)rrrrNotImplementedrrrr__rmul__szVec2D.__rmul__cCs"t|d|d|d|dSrrrrrr__sub__sz Vec2D.__sub__cCst|d |d Srrrrrr__neg__sz Vec2D.__neg__cCs|dd|dddS)Nrrrrrrrr__abs__ sz Vec2D.__abs__cCsjt|d |d}|tjd}t|t|}}t|d||d||d||d|S)Nrrf@)rmathpicossin)rangleZperpcsrrrrotate sz Vec2D.rotatecCs|d|dfSrrrrrr__getnewargs__szVec2D.__getnewargs__cCsd|S)Nz (%.2f,%.2f)rrrrr__repr__szVec2D.__repr__N) __name__ __module__ __qualname__rrrrrrrrrrrrrrrscCsTt|j}||D]}t||q|jD]\}}t|tjkr0|||<q0dSr) list __bases__reverse __methodDict__dict__itemstypetypes FunctionType)r_dictZbaseListZ_superrrrrrr!s  rcCsi}t|||Sr)rkeys)rrrrr __methods+s rzTdef %(method)s(self, *args, **kw): return self.%(attribute)s.%(method)s(*args, **kw)rc Csi}t||i}t|}|D]B}|dddksd|dddksd||ksd||krXq"||||<q"|D]D\}} || d} t|trt||d} t| | t||| |qndS)Nr_)methodfunc)rZ attribute) rrrrrstr __stringBodyexecsetattr) Z fromClassZtoClassZtoPartZexcludeZ_dict_1rZmfcZexrrdZ execStringrrr__forwardmethods5s  0    rc@s`eZdZdddZdddZd d Zd d Zd dZddZddZ ddZ ddZ ddZ dS)r^Xc Cs0tjj||||d||_|||_|_|||_|_d|_ tj ||||j tj dd|_ tj ||j jtjd|_tj ||j jd|_|j j|jj|jjd|jdd dd |jdd dd |j jd |d ddd d d d |jjd |d dd d d d d |jjd |d d dd d d d ||jd |jdS)N)rzrwhiter)rzrbgZreliefZ borderwidth)commandZorient)r)ZxscrollcommandZyscrollcommandrr)ZweightZminsizenewsZpadxZin_ZpadyrowcolumnZrowspanZ columnspanZstickyz )TKFrame__init__winfo_toplevelZ _rootwindowrzrrrrCanvasZSUNKEN_canvasZ ScrollbarZxviewZ HORIZONTALhscrollZyviewvscrollZ configuresetZ rowconfigureZcolumnconfiguregridr`bindonResize)rmasterrzrrrrrrrPsN    zScrolledCanvas.__init__NcCs|r ||_|r||_|r||_|jj||j d|j d|jd|jdfd|jd|j|jd|j|jd|j|jd|j| dS)Nr)r scrollregionr) rrrrconfig xview_movetorz yview_movetor adjustScrollsrrrrrrrr`is&zScrolledCanvas.resetc Cs|j}|j}|jd|j||j|jd|j||j||jks`||jkr|jjd|ddddddd|j jd|dddddddn|j |j dS)Nrrrrr) r winfo_width winfo_heightr rr rrrrZ grid_forget)rcwidthcheightrrrr {s&   zScrolledCanvas.adjustScrollscCs |dSr)r )reventrrrrszScrolledCanvas.onResizecGs |jj|Sr)rbboxrargsrrrrszScrolledCanvas.bboxcOs|jj||Sr)rcgetrrkwargsrrrrszScrolledCanvas.cgetcOs|jj||dSr)rrrrrrrszScrolledCanvas.configcOs|jj||dSr)rrrrrrrszScrolledCanvas.bindcOs|jj||dSr)runbindrrrrrszScrolledCanvas.unbindcCs|jdSr)r focus_forcerrrrrszScrolledCanvas.focus_force)rrrr)NNN) rrrrr`r rrrrrrrrrrrrJs  rc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)_RootcCstj|dSr)rTkrrrrrrsz_Root.__init__cCs&t||||||_|jjddddS)NrZboth)expandfill)rrZpack)rrzrrrrrr setupcanvassz_Root.setupcanvascCs|jSr)rrrrr _getcanvassz_Root._getcanvascCs|d||||fdS)Nz %dx%d%+d%+d)Zgeometry)rrzrstartxstartyrrr set_geometrysz_Root.set_geometrycCs|d|dS)NZWM_DELETE_WINDOW)Z wm_protocol)rdestroyrrr ondestroysz_Root.ondestroycCs|Sr)Zwinfo_screenwidthrrrr win_widthsz_Root.win_widthcCs|Sr)Zwinfo_screenheightrrrr win_heightsz_Root.win_heightN) rrrrrrr"r$r%r&rrrrrsrc@s(eZdZddZddZddZddZdFd d Zd dZdGddZ ddZ ddZ ddZ ddZ dHddZddZdIddZdJd d!ZdKd"d#ZdLd$d%Zd&d'ZdMd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;ZdNdd?Z d@dAZ!dBdCZ"dOdDdEZ#d S)PTurtleScreenBasecCstjdd|jd}||S)Nr)rzrr)r PhotoImagecvblank)rZimgrrr _blankimageszTurtleScreenBase._blankimagecCstj||jdS)N)filer)rr(r))rrrrr_imageszTurtleScreenBase._imagecCs||_t|tr"|jj}|jj}nJt|jd}t|jd}|jj| d| d|d|dfd||_||_d|_|_ dS)Nrzrrrr) r)rrrrrrrxscaleyscale)rr)whrrrrs  *zTurtleScreenBase.__init__cCs|jjddddS)N)rrrrrrrroutline)r)Zcreate_polygonrrrr _createpolyszTurtleScreenBase._createpolyNFc Csg}|D]*\}} |||j|| |jq|jj|f||dk r^|jj||d|dk rv|jj||d|dk r|jj||d|r|j|dS)Nr)r4rzappendr/r0r)coordsZ itemconfigureZ tag_raise) rZpolyitem coordlistrr4rztopclrrrrr _drawpolys  zTurtleScreenBase._drawpolyc Cs|jjddddddtjdS)Nrrr)rrzZcapstyle)r)Z create_linerZROUNDrrrr _createline szTurtleScreenBase._createlinec Cs|dk rNg}|D]*\}}|||j|| |jq|jj|f||dk rf|jj||d|dk r~|jj||d|r|j|dS)Nr6r7r8) rZlineitemr;rrzr<r=rrrrr _drawlines  zTurtleScreenBase._drawlinecCs|j|dSr)r)deleteritemrrr_delete(szTurtleScreenBase._deletecCs|jdSr)r)r,rrrr_update.szTurtleScreenBase._updatecCs|j|dSr)r)afterrrrrr_delay3szTurtleScreenBase._delaycCs4z|j|}d}Wntjk r.d}YnX|S)NTF)r)Z winfo_rgbrZTclError)rr9Zrgbokrrr_iscolorstring7s   zTurtleScreenBase._iscolorstringcCs0|dk r |jj|d|n |jdSdS)N)rr)r)rrEr)rr9rrr_bgcolorAs zTurtleScreenBase._bgcolorcCst|\}}||j}||j}dddd}|jj|d| |||||d} |j| \} } } } |j| | dfS)NswrZse)rPcenterr_r)textanchorrfont)r/r0r)Z create_textrr,)rr[txtalignrPrWrrrOrCZx0Zy0Zx1Zy1rrr_writeJs    zTurtleScreenBase._writercsDdkrj|d|n$fdd}j|d|||dS)N cs:j|jjj|j j}}||dSrr)canvasxrr/canvasyrr0rrrfunrrreventfunesz+TurtleScreenBase._onclick..eventfunr)Z tag_unbindZtag_bindrrCrZnumaddr[rrYr_onclick\szTurtleScreenBase._onclickcsDdkrj|d|n$fdd}j|d|||dS)Nzcs:j|jjj|j j}}||dSrrUrXrYrrr[wsz-TurtleScreenBase._onrelease..eventfunr\r]rrYr _onreleaseks zTurtleScreenBase._onreleasecsDdkrj|d|n$fdd}j|d|||dS)NzcsTz:j|jjj|j j}}||Wntk rNYnXdSr)r)rVrr/rWrr0rrXrYrrr[sz*TurtleScreenBase._ondrag..eventfunr\r]rrYr_ondrag~s zTurtleScreenBase._ondragcs@dkrjd|n"fdd}jd|||dS)NrTcs:j|jjj|j j}}||dSrrUrXrYrrr[sz1TurtleScreenBase._onscreenclick..eventfunr)rr)rrZr^r_r[rrYr_onscreenclicks zTurtleScreenBase._onscreenclickcs>dkr|jd|dnfdd}|jd||dS)Nzcs dSrrrrZrrr[sz0TurtleScreenBase._onkeyrelease..eventfunrcrrZrr[rrfr _onkeyreleases zTurtleScreenBase._onkeyreleasecsndkr4|dkr |jddqj|jd|dn6fdd}|dkrX|jd|n|jd||dS)Nz z cs dSrrrerfrrr[sz.TurtleScreenBase._onkeypress..eventfunrcrgrrfr _onkeypresss zTurtleScreenBase._onkeypresscCs|jdSr)r)rrrrr_listenszTurtleScreenBase._listencCs(|dkr|j|n|j||dSNr)r)Z after_idlerFrrZtrrr_ontimerszTurtleScreenBase._ontimercCs|jjdd|dS)Nrimage)r)Z create_image)rrprrr _createimageszTurtleScreenBase._createimagecCs<|\}}|j|||j| |jf|jj||ddSNro)r)r:r/r0 itemconfig)rrCr[rprrrrr _drawimages zTurtleScreenBase._drawimagecCs |jj||d|j|dSrr)r)rsZ tag_lower)rrCrprrr _setbgpicszTurtleScreenBase._setbgpiccCs |j|Sr)r)rrBrrr_typeszTurtleScreenBase._typecs.|j|fddtdtdD}|S)Ncs"g|]}||d fqS)rr.0ir=rr sz/TurtleScreenBase._pointlist..rr)r)r:rangelen)rrCplrrzr _pointlists zTurtleScreenBase._pointlistcCs|jj||||fddS)Nr.)r)r)rsrx1sry1srx2sry2rrr_setscrollregionsz!TurtleScreenBase._setscrollregionc Cs||j}|D]h}t|j|}g}|rd|dd\}}|||||||dd}q&|jj|f|qdSNr)r)Zfind_allrr:r9) rZ xscalefactorZ yscalefactorrrCZ coordinatesZ newcoordlistrrrrr_rescales zTurtleScreenBase._rescalecCszt|jts|j|jfS||kr6|kr6dkrJnn|jj|jjfS|dk rX||_|dk rf||_|j|||dSr)rr)rrrr`r rrr_resizes  "zTurtleScreenBase._resizecCs@|j}|dkr|jd}|j}|dkr8|jd}||fS)Nrrzr)r)r r)rrzrrrr _window_sizes    zTurtleScreenBase._window_sizecCs|jjdSr)r)Ztkrrrrrrs zTurtleScreenBase.mainloopcCstj|||jdS)N)parent)rZ askstringr))rr)promptrrrr(.s zTurtleScreenBase.textinputcCstj||||||jdS)N)Z initialvalueZminvalueZmaxvaluer)rZaskfloatr))rr)rdefaultZminvalZmaxvalrrrr=s  zTurtleScreenBase.numinput)NNNF)NNNF)N)rN)rN)rN)rN)N)NNN)NNN)$rrrr+r-rr5r>r?r@rDrErHrJrKrSr`rarbrdrhrirjrnrqrtrurvrrrrrrr(rrrrrr'sR            r'c@s eZdZdS)rNrrrrrrrrYsc@s eZdZdS)TurtleGraphicsErrorNrrrrrrbsrc@s eZdZdddZdddZdS)rNcCsz||_|dkr"t|trpt|}nN|dkrVt|trp|drpt|rpt |}n|dkrdg}n t d|||_ dS)Npolygonrp.gifcompoundzThere is no shape type %s) rvrrrrlowerendswithrrr-r_data)rZtype_datarrrrns     zShape.__init__cCs:|jdkrtd|j|dkr$|}|j|||gdS)Nrz Cannot add component to %s Shape)rvrrr9)rpolyrr4rrr addcomponent~s zShape.addcomponent)N)N)rrrrrrrrrrgs c@s@eZdZdddZdddZddZd d Zd d Zd dZdS)TbufferrcCs$||_dgg||_d|_d|_dS)NrF)bufsizebufferptrcumulate)rrrrrrszTbuffer.__init__NcCsD|dkr&t|jD]}dg|j|<qn||_dgg||_d|_dS)Nr)r|rrr)rrryrrrr`s z Tbuffer.resetcCsF|jdkrB|js0|jd|j|_||j|j<n|j|j|dSr)rrrrr9rBrrrpushs  z Tbuffer.pushcCsJ|jdkrF|j|j}|dkr"dSdg|j|j<|jd|j|_|SdSr)rrrrBrrrpops  z Tbuffer.popcCs|j|jdgSr)rrcountrrrr nr_of_itemsszTbuffer.nr_of_itemscCst|jdt|jS)N )rrrrrrrrszTbuffer.__repr__)r)N) rrrrr`rrrrrrrrrs    rc@seZdZdZedededfddZddZdddZ ddZ ddZddZd?ddZd@ddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+ZdAd-d.Zd/d0ZdBd1d2ZdCd3d4ZdDd6d7ZdEd8d9ZdFd:d;ZeZe Z eZ!e Z"eZ#d S)GrTrrrc Cst||tddtddtddtddtddtddtd|d |_d d i|_||_||_td |_ g|_ | t j d kr|}|ddddd|ddddddS)Nr)rrrrr))r))rr)) )))rr))r)rr)rrrr)r)r)rr)rr)rr)rr)rr)rr)rr)rr)rr)r)Q#@Q@)Gz. @Q@)rr)rrr)Qr)Qr)Gz. r)Q#rr)rr)rr)rr)rr)gg$)rr)rr)rr)rr))rr)rr)rr)rr))rGz)rg'@)rr)rr)rrr)rrrp)Zarrowrr4ZsquareZtrianglerr*nopicrrdarwinZwmZ attributesrz-topmost10)r'rrr+_shapes_bgpics_mode _delayvaluer _colormode_keysr5sysplatformrZcall)rr)rrrZ rootwindowrrrrs&     zTurtleScreen.__init__cCstd|_td|_|d|d|_d|_d|_d|_g|_ | dd D]}| d|qP| d|j ddD]}|d|| d|qzdt_dS) Nrrallrrrrr)rr)rrrrDrq_bgpic _bgpicname_tracing_updatecounter_turtlesrrRrrrr _pen)rbtnrrrrr5s       zTurtleScreen.clearNcCs||dkr|jS|}|dkr*td|||_|dkrp||j d|j d|jd|jdd|_|_|dS)NrlogoworldzNo turtle-graphics-mode %s)rrrr) rrrrrrr/r0r`rrrrrr s  zTurtleScreen.modecCs|dkr|dt||}t||}|\}}||d|d|j|j} } |j||_|j||_||j} | |j} |j| } |j| }|| | | || |j| |j| | dS)Nr) rrrr%r/r0rrrrr,)rZllxZllyZurxZuryZxspanZyspanZwxZwyZ oldxscaleZ oldyscalerrrrrrrr'-s            z TurtleScreen.setworldcoordinatescCsT|dkr2|dr(td||}qFtdnt|trFtd|}||j|<dS)Nrrpz;Bad arguments for register_shape. Use help(register_shape)r)rrrr-rrrr)rnamerkrrrr#Ts   zTurtleScreen.register_shapec Cst|dkr|d}t|trD||s0|dkr4|Stdt|z|\}}}Wn(ttfk rztdt|YnX|jdkrdd|||fD\}}}d|krd krnn.d|krd krnnd|krd ksntd t|d |||fS) Nrrrzbad color string: %sbad color arguments: %srcSsg|]}td|qSgo@roundrxrrrrr{sz*TurtleScreen._colorstr..bad color sequence: %s #%02x%02x%02x)r}rrrJr TypeErrorrr)rr9rgbrrr _colorstrws   FzTurtleScreen._colorstrcsxdsStdkr.fdddD}n4tdkrVfddddD}n td tfd d |DS) Nrrcs"g|]}t||ddqS)rrrrwcstrrrr{sz'TurtleScreen._color..)rrrrcsg|]}dt|dqS)rr)rxr2rrrr{srzbad colorstring: %sc3s|]}|jdVqdS)rN)r)rxrrrr sz&TurtleScreen._color..)rr}rr)rrr=r)rrr_colors    zTurtleScreen._colorcCs8|dkr|jS|dkr"t||_n|dkr4t||_dS)Nrr)rrr)rZcmoderrrrs  zTurtleScreen.colormodecCs$|jD]}||j|qdSr)r_setmoderr`)rrrrrr`s  zTurtleScreen.resetcCs|jSr)rrrrrr+szTurtleScreen.turtlescGs4|r||}nd}||}|dk r0||}|Sr)rrKrrrr9rrrrs   zTurtleScreen.bgcolorcCsB|dkr|jSt||_d|_|dk r0t||_|jr>|dSrk)rrrrr,)rnrrrrr*s  zTurtleScreen.tracercCs|dkr|jSt||_dSr)rrrGrrrrs zTurtleScreen.delaycCs<tjsdt_t|jdkr8|jd7_|j|j;_dS)NTrr)r_RUNNINGrrrrrrr _incrementudc s  zTurtleScreen._incrementudccCs<|j}d|_|D]}||q||_|dSNT)rr+ _update_data _drawturtlerE)rtracingrmrrrr,s  zTurtleScreen.updatecCs |dSrkrrrrrr.szTurtleScreen.window_widthcCs |dSNrrrrrrr-&szTurtleScreen.window_heightcCs|jSr)r)rrrrr/s zTurtleScreen.getcanvascCst|jSr)sortedrrrrrrr;s zTurtleScreen.getshapesrcCs||||dSr)rdrrZrr_rrrrRFszTurtleScreen.onclickcCsF|dkr ||jkr6|j|n||jkr6|j||||dSr)rremover9rhrrZrrrrrWs    zTurtleScreen.onkeycCsN|dkr ||jkr>|j|n|dk r>||jkr>|j||||dSr)rrr9rirrrrrus   zTurtleScreen.onkeypresscCs |dSr)rj)rxdummyydummyrrrrs zTurtleScreen.listenrcCs|||dSr)rnrlrrrr"szTurtleScreen.ontimercCsF|dkr|jS||jkr(|||j|<||j|j|||_dSr)rrr-rur)rZpicnamerrrrs  zTurtleScreen.bgpiccCs||||Sr)rr rrrr%szTurtleScreen.screensize)N)N)N)NN)N)rN)N)NN)r)N)NNN)$rrrrrrr5rr'r#rrrr`r+rr*rrr,r.r-rrrRrrrr"rr%r!r$rrr rrrrrsF ( "' #              c@sPeZdZeddeddedddZdZdZdZefddZd d Z dAd d Z ddZ dBddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(ZdCd)d*Zd+d,Zd-d.Zd/d0ZdDd1d2ZdEd3d4Zd5d6Zd7d8ZdFd9d:Z dGd;d<Z!dHd=d>Z"dId?d@Z#eZ$eZ%eZ&eZ'eZ(eZ)eZ*eZ+eZ,d S)J TNavigatorr)rrrrrrcCsB|j|_|j|_||_d|_|d|_||t |dSr) DEFAULT_ANGLEOFFSET _angleOffsetDEFAULT_ANGLEORIENT _angleOrientr undobufferr:rrr`rrrrrs zTNavigator.__init__cCstdd|_tj|j|_dS)Nr)r _positionrSTART_ORIENTATIONr_orientrrrrr`s zTNavigator.resetNcCsL|dkr|jS|dkrdS||_|dkr6d|_d|_n|jd|_d|_dS)Nr)rrrr@r)rrr _fullcirclerrrrrs zTNavigator._setmodecCs0||_d||_|jdkr"d|_n |d|_dS)Nihrrr)r _degreesPerAUrrrZ fullcirclerrr_setDegreesPerAUs   zTNavigator._setDegreesPerAUv@cCs||dSr)r r rrrr:szTNavigator.degreescCs|dtjdSr)r rrrrrrr^5s zTNavigator.radianscCs|j|j|}||dSr)rr_goto)rr;Zenderrr_goCszTNavigator._gocCs||j9}|j||_dSr)r rrrrrrr_rotateHs zTNavigator._rotatecCs ||_dSrr)rendrrrr MszTNavigator._gotocCs||dSrrrr;rrrrCQszTNavigator.forwardcCs|| dSrrrrrrr/hszTNavigator.backcCs|| dSrrrrrrr_|szTNavigator.rightcCs||dSrrrrrrrPszTNavigator.leftcCs|jSrrrrrrr[s zTNavigator.poscCs |jdSrkrrrrrr|s zTNavigator.xcorcCs |jdSrrrrrrr}s zTNavigator.ycorcCs,|dkr|t|n|t||dSr)r r)rrrrrrrIszTNavigator.gotocCs|dd|ddSrk)rIrdrrrrrLs zTNavigator.homecCs|t||jddSrr rr)rrrrrriszTNavigator.setxcCs|t|jd|dSrkr)rrrrrrjszTNavigator.setycCsT|dk rt||}t|tr"|}n$t|tr6t|}nt|trF|j}t||jSr)rrrrrabs)rrrr[rrrr;%s     zTNavigator.distancecCs|dk rt||}t|tr"|}n$t|tr6t|}nt|trF|j}||j\}}tt||dtjdd}||j }|j |j ||j SNrrr ) rrrrrrratan2rr rrr)rrrr[resultrrrruEs       zTNavigator.towardscCsJ|j\}}tt||dtjdd}||j}|j|j||jSr) rrrrrr rrr)rrrrrrrrJhs   zTNavigator.headingcCs>|||j}|j}||d||d}||dS)N@)rJrrr)rZto_anglerZfullrrrrdwszTNavigator.setheadingc Csp|jr|jdgd|j_|}|dkr2|j}|dkrjt||j}dttdt|dd|}d||}d|}d |t |tj d |j }|d kr| | | }}}| } | } |d kr| d d n |d ||t|D].} |||||d ||q|| |d krR| | | |||jrld |j_dS) NseqTr g@gM@rrrrrF)rrrrprrrminrrrr _tracerrHrr|r) rradiusZextentstepsrpZfracr1Zw2lZtrZdlryrrrr4s>" "          zTNavigator.circlecCsdSrr)rrrrrrpszTNavigator.speedcCsdSrr)rarrrrrszTNavigator._tracercCsdSrr)rrrrrrHszTNavigator._delay)N)r )N)N)N)NN)r)NN)N)-rrrrrZ DEFAULT_MODErrrr`rr r:r^rrr rCr/r_rPr[r|r}rIrLrirjr;rurJrdr4rprrHr@r3r0rbrQr\rerfrcrrrrrsX     # # A   rc@seZdZedfddZededfddZd-d d Zd.d d Zd dZddZ ddZ d/ddZ ddZ ddZ ddZddZddZdd Zd0d!d"Zd1d$d%Zd2d'd(Zd)d*Zd+d,ZeZeZeZe Ze ZeZeZdS)3TPenracCs||_d|_t|dSr) _resizemoderr$_reset)rrarrrrsz TPen.__init__rWrAcCsFd|_d|_||_||_d|_d|_d|_d|_d|_d|_ d|_ dS)NrTr)rrr)rrrr) _pensize_shown _pencolor _fillcolor_drawing_speed_stretchfactor _shearfactor_tilt _shapetrafo _outlinewidth)rrWrArrrr&sz TPen._resetNcCs.|dkr|jS|}|dkr*|j|ddS)N)autouserrra)r%rrV)rZrmoderrrras zTPen.resizemodecCs|dkr|jS|j|ddS)N)rY)r'rV)rrzrrrrYsz TPen.pensizecCs|js dS|jdddS)NFrXr+rVrrrrrZ0s z TPen.penupcCs|jr dS|jdddS)NTr5r6rrrrrX>s z TPen.pendowncCs|jSr)r+rrrrrNLs z TPen.isdowncCsjdddddd}|dkr|jS||kr0||}n*d|krDdkrVnntt|}nd}|j|d dS) Nrrrrr)ZfastestZfastnormalZslowZslowestrg%@)rp)r,rrrV)rrpZspeedsrrrrp[s z TPen.speedcGs|rht|}|dkr"|d}}n"|dkr4|\}}n|dkrD|}}||}||}|j||dn||j||jfSdS)Nrrrr)rWrA)r}rrVrr)r*)rrr"ZpcolorZfcolorrrrr9s    z TPen.colorcGs:|r*||}||jkrdS|j|dn ||jSdS)N)rW)rr)rVrrrrrrWs   z TPen.pencolorcGs:|r*||}||jkrdS|j|dn ||jSdS)N)rA)rr*rVrrrrrrAs   zTPen.fillcolorcCs|jdddS)NTshownrVrrrrros zTPen.showturtlecCs|jdddS)NFr8r:rrrrrK szTPen.hideturtlecCs|jSr)r(rrrrrO 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|jd|fd}d|kr|j|dkrd}d|krt |dtr||df|d<|j|dkrd}d|kr|j|dkrd}|r|d|kr&|d|_d|kr:|d|_d|krN|d|_d|krt |dtr|||df|d<|d|_d |kr|d |_d |kr|d |_d |kr|d }t |ttfr||f}||_d |kr|d |_d |kr|d |_ d|kr|d|_d|kr.|d|_ d |ksLd|ksLd |kr|j\} } |j} t|j t|j } } | | | | | | | | | | | | f|_|dS)N) r9rXrWrArYrpra stretchfactorrnr4rsrVFrXTrWrYrArprar;rnr4r9rs)r(r+r)r*r'r,r%r-r.r1r/rdictr,rrrr_newLinerrrrrr0rE)rrVZpendictZ_pdpZ_p_bufrZnewLineZsfZscxZscyZshfsacarrrrV! s/                          zTPen.penTcCsdSrrrZusePosrrrr= sz TPen._newLineFcCsdSrr)rrZforcedrrrrE sz TPen._updatecCsdSrrrrrrr sz TPen._colorcCsdSrrrrrrr szTPen._colorstr)N)N)N)N)T)TF)rrrrrr&rarYrZrXrNrpr9rWrArorKrOrVr=rErrrzryr]rUr=rqrMrrrrr$s8    &.%$    r$c@seZdZddZddZdS) _TurtleImagecCs||_d|_||dSr)rrv _setshape)rr shapeIndexrrrr sz_TurtleImage.__init__cs|j||_|jdkr*j|jkr2nndS|jdkrPj|jkrXnndS|jdkrp|jn |jdkr|jD]}|qj|j|_|jdkr|_nF|jdkrԈjdj|_n&|jdkrfddj|jD|_dS)Nrrp)rprrr*csg|] }qSrr5rxrCrrrr{ sz*_TurtleImage._setshape..) rrDrvrrD_itemr5rqr)rrDrCrrGrrC s(""          z_TurtleImage._setshapeN)rrrrrCrrrrrB srBc@seZdZgZdedededfddZddZd d Zd d Zd dZ ddZ ddZ ddZ dlddZ ddZddZddZddZdmdd Zdnd!d"Zdod#d$Zd%d&Zdpd'd(Zd)d*Zdqd+d,Zd-d.Zd/d0Zdrd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdsdd?Z!d@dAZ"dBdCZ#dtdEdFZ$dGdHZ%dIdJZ&dKdLZ'dudMdNZ(dOdPZ)dvdSdTZ*dUdVZ+dWdXZ,dYdZZ-d[d\Z.d]d^Z/e/Z0dwd_d`Z1dxdbdcZ2dydddeZ3dzdfdgZ4dhdiZ5djdkZ6eZ7dS){r NrkrrcCs4t|tr||_n|t|tr:|tjkr2tj|||_nTt|ttfrtjD]}|j |krN||_qqNt||_tj|jn t d||j}t || t ||j|||_t|||_d|_d|_d|_|_||_d|_||_|jg|_|jg|_g|_||_t ||_!|"dS)Nzbad canvas argument %sF)#r_Screenrrr screensr9rrr)rrrrr$rr?drawingLineItemrBr_poly _creatingPoly _fillitem _fillpathr(_hidden_from_screencurrentLineItemr currentLiner stampItems_undobuffersizerrrE)rZcanvasrkrrrrrrr s@                 zRawTurtle.__init__cCs0t|t||||dSr)rr`r$r&_clearrrErrrrr` s   zRawTurtle.resetcCs&|dks|dkrd|_n t||_dSrk)rr)rsizerrrrh szRawTurtle.setundobuffercCs|jdkrdS|jSrk)rrrrrrrx, s zRawTurtle.undobufferentriescCsld|_|_|jD]}|j|q|j|_g|_|jrJ|j |j |jg|_| | |j dSr)rNrOrrrDr?rQrRr+r9rr7rhrTrBrrrrU9 s    zRawTurtle._clearcCs||dSr)rUrErrrrr5G s zRawTurtle.clearcCsF|j|jjdkrdSt|jdkrB|j|j|j|j|jdSr) rrrr}rRr@rQr)r'rrrrrV s  zRawTurtle._update_datacCsx|j}|jdkrdS|jdkrD|||||jn0||jdkrt|D] }|q^|dSr) rrrrrErHrrr+)rrrmrrrrE^ s     zRawTurtle._updatecCs|j||Sr)rr*)rflagrrrrrp szRawTurtle._tracercCs |j|Sr)rrrrrrr szRawTurtle._colorcCs |j|Sr)rrrrrrr szRawTurtle._colorstrc Cst|tr|Sz|\}}}Wn(ttfk rDtdt|YnX|jjdkrldd|||fD\}}}d|krdkrnn.d|krdkrnnd|krdksntdt|d|||fS) NrrcSsg|]}td|qSrrrrrrr{ sz!RawTurtle._cc..rrrr)rrrrrrr)rrrrrrrr_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ʇfddj |jjjD|j_ |_||S)Nrrpr*rcsg|] }qSrrErFrGrrr{ sz#RawTurtle.clone..)rr=r+rrrBrDrr9rrvr5rHrqrr?rQrE)rrqttyperrGrr8 s.      zRawTurtle.clonecCsB|dkr|jjS||jkr*td||j||dS)NzThere is no shape named %s)rrDrrrrCrE)rrrrrrk s   zRawTurtle.shapecCs||kr|krdkr8nn|j\}}|||jfS|dksH|dkrPtd|dk rt|dkrj||f}q||f}n|dk r|jd|f}n|j}|dkr|j}|jd||ddS)Nrz(stretch_wid/stretch_len must not be zeror3)rar;r4)r-r1rrV)rZ stretch_widZ stretch_lenr4r;rrrrl s$"    zRawTurtle.shapesizecCs |dkr|jS|jd|ddS)Nr3)rarn)r.rV)rZshearrrrrn szRawTurtle.shearfactorcCs<| |j|j}|tjddtj}|jd|ddS)Nrrr3)rars)r rrrrVrrrsrrrrg szRawTurtle.settiltanglecCs>|dkr0|j dtj|j}||j|jS||dS)Nr)r/rrrr rrgr[rrrrt4 szRawTurtle.tiltanglecCs|||dSr)rgrtrrrrrsN szRawTurtle.tiltcCs6||kr(|kr(|kr(dkr2nn|jS|j\}}}}|dk rL|}|dk rX|}|dk rd|}|dk rp|}||||dkrtd||||f|_t| |dtj} t| t| } } | || || || || || || || |f\} } }}| |f|_| ||_| |_ |j dddS)Nrz0Bad shape transform matrix: must not be singularrr3r4) r0rrrrrrr-r.r/rV)rt11t12t21t22Zm11Zm12Zm21Zm22Zalfar?r@Za11Za12Za21Za22rrrrma s0,   zRawTurtle.shapetransformcs^|j|j\|j\tjj}dt||\fdd|DS)NrcsFg|]>\}}||j ||jfqSr)r/r0rxrrZe0Ze1Zp0Zp1rrrr{ sz(RawTurtle._polytrafo..)rrrrr0r/r)rrerrar _polytrafo s  zRawTurtle._polytrafocCs2|jj|jj}|jdkr.||j|jdkSdS)Nrr)rrrrDrv _getshapepolyr)rrkrrrrG s  zRawTurtle.get_shapepolyFcsx|jdks|r|j\n>|jdkrNtd|jd}|dd|f\n|jdkr\|Stfdd|DS) Nr3r2rg@rrc3s2|]*\}}||||fVqdSrrr`r\r]r^r_rrr sz*RawTurtle._getshapepoly..)r%r0maxr'r)rrrr"rrerrd s  zRawTurtle._getshapepolyc Cs|j}|j|jj}|j}|jj}|jr*|jdkr*|jdkr*d|_ |j }|dkr|j dkrfd}n|j dkrx|j }n|j }|||}|j|j}}|j|||||ddnt|d kr|||j|nZ|d krt||D]D\} \} }}||| d} |j| | |||||j ddqnx|j r6dS|dkrR||d d d nJ|d krv|||j|jd j n&|d kr|D]} || d d d qd|_ dS)NrFrrrr2Trr4rzr<rprrrrrr*)rrrrDrvrHr(rrrPrr%r'r1rcrdr*r)r>rtrziprX) rrrkrZZtitemtshaper1fcocrCrrrrr sR           zRawTurtle._drawturtlec CsT|j}|j|jj}|j}|j}|dkr|}|jdkr@d}n|jdkrR|j}n|j }| | |}|j |j }}|j|||||ddn|dkr|d}|||j|n|d kr4g}|D]} |} || qt|}t||D]D\} \} }}| | | d} |j| | |||||j ddq|j||jd |f|S) Nrrrr2Trgrprrrr)rrrrDrvrr5r%r'r1rcrdr*r)r>rqrtrr9rrirXrSrr) rrrkrZrjstitemr1rkrlZelementrCrrrrrr sH       zRawTurtle.stampcCs||jkrDt|tr,|D]}|j|qn |j||j|d|f}|j}||jkr`dS|j|}|j|||j kr|j d|j |_ |j |j d|j dgdS)Nrrr) rSrrrrDrrrindexrrinsert)rstampidZsubitemrCZbufrnrrr _clearstamp s        zRawTurtle._clearstampcCs|||dSr)rqrE)rrprrrr6 s zRawTurtle.clearstampcCs^|dkr|jdd}n&|dkr0|jd|}n|j|d}|D]}||qB|dSrk)rSrqrE)rrZtoDeleterCrrrr7- s zRawTurtle.clearstampsc Cs|j|j|jt|jtf}|j}d|j|||j|j dd| |j|j ddff}|j rh|j ||j}|jrZ|jdkrZ||}|d|jd|d|jd}dt|ddd|j|j}|d|} td|D]R} | dkrd } nd } || | |_|jr2||j||jf|j|j| |q|jrZ|j|jd d |jd |jrn|j |t|jtr|j|||_|jr|j|t|j dkr||dS)Ngorrrrr皙?rTFrrrrrz*)r+r)r'rrOrrrrQrRrrrrr,rr/r0rr|r@rKrEr9rMrLr}r=) rrgo_modesrZ undo_entrystartdiffdiffsqnhopsdeltarr<rrrr I sb      $$      zRawTurtle._gotocs|\}}}}|\}}}} |\} } } |jt|j|dkrDtd| |_| |_| ddgkrbd} n|} j| | | |dfdd|jD}|D]}||j |q|}|j rj dkr||}|d j d |dj d }dt|dd d |j |j }|d |}td|D]P}|dkr@d}nd}||||_|rr|j||jf||||q,|rj|jdd|d||_|jrt|jd kr|j|jgkrd|_d|_| r|jgkrd|_tdn|jdk r|j|dS)Nrz$undogoto: HALLO-DA-STIMMT-WAS-NICHT!rrrucs&g|]}|kr|dkr|qS)r)rvrwrrrrr{ sz'RawTurtle._undogoto..rrrrrsrTFrtzUnwahrscheinlich in _undogoto!)rrrrrQrRr@rrDrr,rr/r0rr|rKrErMr}rLrrO)rentryoldnewrwZcoodataZdrawingZpcZpsrBZcLIZcLr~ZusepcZtodeleteryrxryrzr{r|rr<rr}r _undogoto~ sl     $$          zRawTurtle._undogotocCs|jr|jd||jf||j9}|j|}|jj}|dkr|jdkrd|j}dtt ||}d||}t |D]}|j||_| q|||_| dS)Nrotrrg@r) rrr rrrrr,rrr|rE)rrZ neworientrZanglevelr!r|rrrrr s      zRawTurtle._rotateTcCsnt|jdkrD|j|j|j|j|j|j|_|j |jn|jj|jddg|_|rj|j g|_dS)NrT)r<) r}rRrr@rQr)r'r?rr9rrArrrr= s zRawTurtle._newLinecCs t|jtSr)rrOrrrrrrB s zRawTurtle.fillingcCsX|s"|j|_|j|j|jg|_||j rL|j d|jf| dS)N beginfill) rBrr5rNrr9rrOr=rrrErrrrr1 s   zRawTurtle.begin_fillcCs^|rZt|jdkrF|jj|j|j|jd|jrF|jd|jfd|_|_| dS)Nrr6dofill) rBr}rOrr>rNr*rrrErrrrr> s  zRawTurtle.end_fillc Gs8|sNt|ttfr0||}|jt|jd}qr|j}|sr|jt|jd}n$|dkrh|jt|jd}||}t|jdr|j |j ||}|j ||j r|j d|fn|}|j r|j dgd|j _z>|dkr|||||||dW5||X|j r4d|j _dS) Nr_dotr<rTr2rF)rrrrr'rfr)hasattrrrrrr9rrrVrrarMrXrYrWrC)rrVr9rCrVrrrr< s:        z RawTurtle.dotcCsB|j|j||||j\}}|j||jr>|jd|f|S)Nwri)rrSrr)rr9rr)rrQrRrPrCrrrrrSH s zRawTurtle._writerPArialrr7cCs`|jr|jdgd|j_|t|||}|rN|\}}||||jr\d|j_dS)NrTF)rrrrSrrr[re)rargZmoverRrPrrrrrrr{R s  zRawTurtle.writecCs|jg|_d|_dSr)rrLrMrrrrr2o s zRawTurtle.begin_polycCs d|_dSNF)rMrrrrr?} s zRawTurtle.end_polycCs|jdk rt|jSdSr)rLrrrrrrD s zRawTurtle.get_polycCs|jSrrGrrrrrF szRawTurtle.getscreencCs|SrrrrrrrH szRawTurtle.getturtlecCs |j|Sr)rrrGrrrrH szRawTurtle._delayrcCs"|j|jj||||dSr)rr`rrHrErrrrrR szRawTurtle.onclickcCs"|j|jj||||dSr)rrarrHrErrrrrT szRawTurtle.onreleasecCs|j|jj|||dSr)rrbrrHrrrrrS szRawTurtle.ondragcCs,|jdkrdS|dkr@|\}}|| ||j|j}n|dkr\|d}||n|dkrp||n|dkr|d}|j||j |n|dkr|d}|jj |dddd nh|d kr|d}d|_ |_ ||jkr(|j||j |n$|d kr(t ||d|jdS) Nrrrrrr)rr<rrhrr3rrV)rrr rr6rrrDrrr>rNrOr$rV)ractionrrZdegPAUZdummyrmrCrrr_undos<           zRawTurtle._undocCsl|jdkrdS|j}|d}|dd}|dkr\|rh|}||d|ddq4n |||dS)Nrrr)rrr)rrCrrrrrrw's   zRawTurtle.undo)NN)N)NNN)N)N)NNNN)F)N)T)N)FrPr)N)rN)rN)rN)8rrrrJrrr`rhrxrUr5rrErrrrXr8rkrlrnrgrtrsrmrcrGrdrrrrqr6r7r rrr=rBr1r>r<rSr{r2r?rDrFrHrErHrRrTrSrrwrvrrrrr sp (  (  (   (  (- 5A  0        cCstjdkrtt_tjSr)r _screenrIrrrrr Js c@sfeZdZdZdZedZddZededededfd d Zd d Z d dZ ddZ ddZ dS)rINr)cCstjdkr4tt_|_|jtj|j|jtjdkrtd}td}td}td}td}td}|j |||||j t_t |tj| ||||dS)Nrzrrrrr)rI_rootrr)_titler$_destroyrrrrrrr&)rrzrrrrrrrrrXs   z_Screen.__init__rzrrrcCst|jdsdS|j}|j}t|trNd|krBdkrNnn||}|dkrb||d}t|trd|krdkrnn||}|dkr||d}|j|||||dS)Nr"rrr)rrr%r&rrr"r,)rrzrr r!rLZshrrrr&ns   " " z _Screen.setupcCs tjdk rtj||t_dSr)rIrr)r)rZ titlestringrrrr)s  z _Screen.titlecCs:|j}|tjkr(dt_dt_dt_dt_dt_|dSr) rrIr rrrrrr#)rrootrrrrs z_Screen._destroycCs |dSr)rrrrrrsz _Screen.byecsNfdd}|tdr"dSz tWntk rHtdYnXdS)Ncs dSr)r)rrrrrexitGracefullysz+_Screen.exitonclick..exitGracefullyrr)rRrrAttributeErrorexit)rrrrrrs   z_Screen.exitonclick) rrrrrrrrr&r)rrrrrrrrIRs  ( rIc@s0eZdZdZdZedededfddZdS)r NrkrrcCs,tjdkrtt_tj|tj|||ddS)N)rkrr)r rr r r)rrkrrrrrrs  zTurtle.__init__)rrrrrrrrrrrr s turtle_docstringdictc Csi}tD]}d|}t|j||<qtD]}d|}t|j||<q(td|d}tdd|D}|d|ddD](}|d t||d ||q||d}|d t||d |||d |W5QRXdS) Nz_Screen.zTurtle.z%s.pyr1css$|]}|ddtkr|VqdS)rrN)r _alias_listrrrrrsz&write_docstringdict..zdocsdict = { rz%s : z """%s """, z """%s """ z} ) _tg_screen_functionsr__doc___tg_turtle_functionsrrr{reprclose)rdocsdict methodnamerrrrrrr~s$   c Cs`dd|i}t|}|j}|D]8}z||t|_Wq"tk rXtd|Yq"Xq"dS)Nz!turtle_docstringdict_%(language)srzBad docstring-entry: %s)r __import__rrrrr)Zlangmodnamemodulerrrrrread_docstringssrrzCannot find docsdict forz;Unknown Error when trying to import %s-docstring-dictionaryc Csd}}t|j\}}}|dd}|dd}|jp:g}dd|D}dgt|t||}ddt||D} |dk r| d||d||dk r| d||d|d| }d |}d|}d |}||fS) NrrcSsg|]}d|fqS)z=%rr)rxrrrrr{<sz"getmethparlist..cSsg|]\}}||qSrr)rxrZdfltrrrr{>s*z**z, z(%s))inspectZgetargs__code__ __defaults__r}rir9r) ZobZdefTextZcallTextrZvarargsZvarkwZitems2ZrealArgsdefaultsZitems1rrrgetmethparlist,s&     rcCsJddl}|dkrdStd}|d|d}|d|}|d|}|S)Nrr%s.r \(.+ %s\)::rerreplacecompilesub)docstrrZ turtlename newdocstrparexprrr_turtle_docreviseKs rcCsJddl}|dkrdStd}|d|d}|d|}|d|}|S)Nrrrrrrr)rrZ screennamerrrrr_screen_docreviseWs 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 Csl|D]b}t||}t|\}}|dkr4td||qtj|||||d} t| t||jt|_qdS)Nrz>>>>>>)objinitrZ paramslistZargslist)getattrrr __func_bodyformatrglobalsr) Z functionsrrrZ docreviserrZpl1Zpl2Zdefstrrrr_make_global_funcsws     rzTurtle._screenzScreen()z Turtle._penzTurtle()__main__cCstrtntdSr)rNr]rUrrrr switchpensrcCslttdttdttdtdD]Z}|dkrDttdD]}tdt dqL|dkrxt dt ttd tq2td t d td tt dtdt dtdt d tt dd t dd t dtdD]$}tdt dtdt dqtdttdD]&}tdt dtdt dq:t dS)NTdrrrrZZmaroonrrrFZ startstartrxredr)r`r*ryr0r=rzr|r1rCrPr9r>r_r{)ryrrrrdemo1sX         rcCsBtdttdttddtddd}tdtdD]}tt |dqBt dt rnt q`t tdtd d}td tdtd td d D]p}|dkrttd d|dd|tdD]}t|tdqt|d7}tdttddqtdttdtdttddtdttdD](}t ddtdtdtdq`ttdttdttdt}|dt}|d|d| |d|d||dd|d||d|dd|d|dtt|d}||dkr|d|d ||||d|d!dkr| | t|d7}qZ|j d"d#d$d%|d&|dd'd(}t!"dt r| | q|d|j d)d*d+|#|ddS),Nrrrrrrzwait a moment...rZgreenrrrx FrrZyellowr2rr2i(rZblueZorangerg @g333333?rzCAUGHT! )rrboldr_)rPrRrcSsttdSr)rr)rrrrrbabaszdemo2..babaz Click me!)ZCourierrr)rP)$rprqrYrdrur;rbr|rr4r{rxrwr`rQrrWr1rAr@r>r]rUr9rkrHrar rPryrIr=rrtimesleeprR)r rZlaengeryZtrirrrrrrdemo2s                             r)r)r)EZ_verZtkinterrrrrrrZos.pathrrrcopyrrZ _tg_classesrrZ _tg_utilities__all__rrrrrrrrrrrrrrrrrobjectr'rrrrrrr$rBr r r rIr r r~rZ _LANGUAGE ImportErrorrrrrrrrrrrrrrrrrgs      5  c /&/O} "      5c