a
    ze:                     @   s   d dl Z d dlZd dlT d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlZejejeZe jdkZdZd	Zd
ZdZdZddefZdZg dZdZdZg dZ dd Z!defdefdejffZ"G dd de#Z$dd Z%e&dkre%  dS )    N)*)ColorDelegatorcolor_config)
Percolator)	view_text)__doc__darwin               Arial   )r   r   Zbold)zLucida Console
   normal   d   )   	   r      r                     c                   C   s   dd t tD S )Nc                 S   s.   g | ]&}| d r|d dkr|dd qS )z.pyr   _N)endswith).0entry r"   )/usr/lib/python3.9/turtledemo/__main__.py
<listcomp>u   s   z%getExampleEntries.<locals>.<listcomp>)oslistdirdemo_dirr"   r"   r"   r#   getExampleEntriest   s    r(   zTurtledemo helpzAbout turtledemozAbout turtle modulec                   @   s   e Zd Zd(ddZdd Zdd Zdd	 Zd
d Zd)ddZd*ddZ	dd Z
d+ddZdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' ZdS ),
DemoWindowNc              	   C   s  t   | _ }t_|d |d| j trbdd l}|j	ddddd
t ddg|j|jd	 |jdd
d |jdd
d |jd
dd
d |jddd
d |jddd
d t|tdd| _| jj| | jddd | jj| | jddd | jj| | jddd | j|d< ttdtdd}|| | || | |jdddd t|d
ddddtd| _ trt!|d t"d!| j#d"| _$t!|d#t"d!| j%d"| _&t!|d$t"d!| j'd"| _(nHt!|d t"d%d&| j#d'| _$t!|d#t"d%d&| j%d'| _&t!|d$t"d%d&| j'd'| _(| j jd
ddd(d) | j$jd
d
d*d+ | j&jd
dd*d+ | j(jd
dd*d+ t)| j*+t,  d,| _-d,| _.|rx| /| | 0t1t1t1d-d. t2| _3d S )/NzPython turtle-graphics examplesZWM_DELETE_WINDOWr   Z	osascriptz-ez tell application "System Events"z>set frontmost of the first process whose unix id is {} to truezend tell)stderrstdoutr	   )weightZ   )Zminsizer,   r
   r   )reliefborderwidthZExamples)menulabel	underlineZFontsizeZHelpr0   r   z#ddd)orientZ	sashwidthZ
sashreliefbgr   news)rowZ
columnspanstickyz --- z#ddf)r      r   )Zheighttextr4   fontr/   r.   z START z#00cc22)r9   r:   fgcommandz STOP z CLEAR Zwhitez#fed)r9   r:   r;   Zdisabledforegroundr<   )r   r   )r6   columnr7   padxZew)r6   r=   r7   FzChoose example from menublack)4ZTkrootturtle_roottitleZwm_protocol_destroyr   
subprocessrunformatr%   getpidDEVNULLZgrid_rowconfigureZgrid_columnconfigureMenuZRAISEDZmBarZadd_cascademakeLoadDemoMenumakeFontMenumakeHelpMenuZPanedWindow
HORIZONTALZSOLIDaddmakeTextFramemakeGraphFrameZgridZLabelZRIDGE
output_lblZButtonbtnfont	startDemo	start_btnstopItstop_btnclearCanvas	clear_btnr   r9   Zinsertfilterr   dirtyexitflagloadfile	configGUIDISABLEDSTARTUPstate)selffilenamer@   rE   Zpaner"   r"   r#   __init__   s    





zDemoWindow.__init__c                 C   sP   | j  }| j  }| j d| j|  | j  | j d| j|  | j  d S )Ng      ?)_canvasZwinfo_widthZwinfo_heightZxview_moveto	canvwidthZyview_moveto
canvheight)ra   eventZcwidthZcheightr"   r"   r#   onResize   s    

zDemoWindow.onResizec                 C   s6  t | | _}t|ddddd | _}t| t|dd | _}|j|d< |jt	t
d	 t|d
td | _}|j|d< |jttd	 |j|d< |j|d< tt|d< trdnd}|d| | j |d| | j |d| | j |d| | j |d| j |d| j |d| j |jt	tdd |S )Nr9   r   Znone-   )namer>   wrapwidthvbar)rj   r<   )sidefillhbar)rj   r3   ZyscrollcommandZxscrollcommandr:   ZCommandZControlz
<%s-minus>z<%s-underscore>z
<%s-equal>z	<%s-plus>z<Control-MouseWheel>z<Control-Button-4>z<Control-Button-5>r	   )rn   ro   expand)ZFrame
text_frameTextr9   r   Z	Scrollbarrm   ZyviewpackZLEFTYrN   rp   ZxviewZBOTTOMXsettupletxtfontr   Zbind_alldecrease_sizeincrease_sizebindupdate_mousewheelZBOTH)ra   r@   rr   r9   rm   rp   Zshortcutr"   r"   r#   rP      s0    



zDemoWindow.makeTextFramec                 C   s   |t j_d| _d| _t |dd| j| j t j_ | _}|  |j	d| j
 d|jd< t   | _}t j||j |j| _|gt j_|S )Ni  i   iX  z<Configure>r   r/   )rA   Z_ScreenrB   re   rf   ZScrolledCanvasrd   ZadjustScrollsZ_rootwindowr|   rh   ZScreenscreenTurtleScreenrc   scanvasZ	RawTurtleZscreens)ra   r@   ZcanvasZ_s_r"   r"   r#   rQ      s    

zDemoWindow.makeGraphFramec                 C   s(   |t d< tt | jd< d| | jd< d S )Nr	   r:   zFont size %dr9   )ry   rx   r9   rR   )ra   sizer"   r"   r#   set_txtsize   s    zDemoWindow.set_txtsizec                 C   s   |  ttd d t dS Nr	   break)r   maxry   MINIMUM_FONT_SIZEra   dummyr"   r"   r#   rz     s    zDemoWindow.decrease_sizec                 C   s   |  ttd d t dS r   )r   minry   MAXIMUM_FONT_SIZEr   r"   r"   r#   r{     s    zDemoWindow.increase_sizec                 C   s$   |j dk t kr|  S |  S d S )Nr   )Zdeltar   rz   r{   )ra   rg   r"   r"   r#   r}     s    zDemoWindow.update_mousewheel bluec                 C   s   t r0| jj|d | jj|d | jj|d nT| jj||tkrDdndd | jj||tkr`dndd | jj||tkr|dndd | jj||d d S )N)r`   z#d00z#fca)r`   r4   )r9   r;   )r   rU   configrW   rY   NORMALrR   )ra   startstopclearZtxtZcolorr"   r"   r#   r]     s    zDemoWindow.configGUIc                    s:   t |}t D ]&}|f fdd	}|j|dt|d q|S )Nc                    s     |  d S N)r\   )r!   ra   r"   r#   load&  s    z)DemoWindow.makeLoadDemoMenu.<locals>.loadr   r1   r2   r:   r<   )rJ   r(   add_commandmenufont)ra   masterr0   r!   r   r"   r   r#   rK   "  s    
zDemoWindow.makeLoadDemoMenuc                    sh   t |}|jd jtd |jd jtd |  tD ]*}|f fdd	}|jt|dt|d q8|S )NzDecrease (C-'-'))r1   r<   r:   zIncrease (C-'+')c                    s     |  d S r   )r   )r   r   r"   r#   resize5  s    z'DemoWindow.makeFontMenu.<locals>.resizer   r   )rJ   r   rz   r   r{   Zadd_separator
font_sizesstr)ra   r   r0   r   r   r"   r   r#   rL   ,  s    

zDemoWindow.makeFontMenuc                    s<   t |}tD ]*\}}||f fdd	}|j|t|d q|S )Nc                    s   t  j| | d S r   )r   r@   )
help_label	help_filer   r"   r#   show?  s    z%DemoWindow.makeHelpMenu.<locals>.show)r1   r:   r<   )rJ   help_entriesr   r   )ra   r   r0   r   r   r   r"   r   r#   rM   ;  s
    zDemoWindow.makeHelpMenuc                 C   s   | j r| j  d| _ d S NF)rZ   r~   r   r   r"   r"   r#   refreshCanvasD  s    
zDemoWindow.refreshCanvasc                 C   s   |    dtj_d| }t| tj| | _t| jj	d}|
 }W d    n1 sX0    Y  | jdd | jd| | j|d  | tttdd t| _d S )	NFzturtledemo.rz1.0endz# - a Python turtle graphics examplezPress start buttonred)rX   rA   r   _RUNNING
__import__sysmodulesmoduleopen__file__readr9   deleteinsertr@   rC   r]   r   r^   READYr`   )ra   rb   modnamefcharsr"   r"   r#   r\   I  s    &
zDemoWindow.loadfilec                 C   s   |    d| _dtj_| tttdd | j	  | j
d t| _z$| j }|dkr`t| _nt| _W n. tjy   | jd u rY d S t| _d}Y n0 | jtkr| ttt| n"| jtkrd| _| tttdd d S )	NTzdemo running...r?   ZstandardZ	EVENTLOOPzstopped!zuse mouse/keys or STOPr   )r   rZ   rA   r   r   r]   r^   r   r~   r   modeRUNNINGr`   r   mainEVENTDRIVENDONEZ
Terminatorr@   r[   )ra   resultr"   r"   r#   rT   X  s8    









zDemoWindow.startDemoc                 C   s4   |    | jd | jjdd | ttt d S )Nallr   )Zcursor)r   r~   _deleter   r   r]   r   r^   r   r"   r"   r#   rX   u  s    zDemoWindow.clearCanvasc                 C   s2   | j r&|   d| _ | tttdd dtj_d S )NFzSTOPPED!r   )r[   rX   r]   r   r^   rA   r   r   r   r"   r"   r#   rV   {  s    
zDemoWindow.stopItc                 C   s   dt j_| j  d | _d S r   )rA   r   r   r@   Zdestroyr   r"   r"   r#   rD     s    
zDemoWindow._destroy)N)N)N)r   r   )__name__
__module____qualname__rc   rh   rP   rQ   r   rz   r{   r}   r]   rK   rL   rM   r   r\   rT   rX   rV   rD   r"   r"   r"   r#   r)      s$   
L



	r)   c                  C   s   t  } | j  d S r   )r)   r@   Zmainloop)demor"   r"   r#   r     s    r   __main__)'r   r%   tkinterZidlelib.colorizerr   r   Zidlelib.percolatorr   Zidlelib.textviewr   Z
turtledemor   Zabout_turtledemorA   pathdirnameabspathr   r'   platformr   r_   r   r   r   r   r   r   rS   ry   r   r   r   r(   r   objectr)   r   r   r"   r"   r"   r#   <module>X   s>   

  