o
    JAf:                     @   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r|e%  dS 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.10/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r1d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"| _(n$t!|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,| _.|r;| /| | 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rVd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_frameZ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   )rx   rw   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   maxrx   MINIMUM_FONT_SIZEra   Zdummyr"   r"   r#   ry        zDemoWindow.decrease_sizec                 C   s   |  ttd d t dS r   )r   minrx   MAXIMUM_FONT_SIZEr   r"   r"   r#   rz     r   zDemoWindow.increase_sizec                 C   s    |j dk t kr|  S |  S )Nr   )Zdeltar   ry   rz   )ra   rg   r"   r"   r#   r|     s   zDemoWindow.update_mousewheel bluec                 C   s   t r| jj|d | jj|d | jj|d n*| jj||tkr"dndd | jj||tkr0d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                         |  d S N)r\   )r!   ra   r"   r#   load&     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 q|S )NzDecrease (C-'-'))r1   r<   r:   zIncrease (C-'+')c                    r   r   )r   )r   r   r"   r#   resize5  r   z'DemoWindow.makeFontMenu.<locals>.resizer   r   )rJ   r   ry   r   rz   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 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 s,w   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r0t| _nt| _W n tjyK   | jd u rDY d S t| _d}Y nw | jtkr[| ttt| d S | jtkrnd| _| tttdd d S 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  s>   







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._destroyr   )r   r   )__name__
__module____qualname__rc   rh   rP   rQ   r   ry   rz   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   rx   r   r   r   r(   r   objectr)   r   r   r"   r"   r"   r#   <module>   sD   U

  
