B
    v9a7                 @   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dddgZdZdZdddddddddddg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 )(    N)*)ColorDelegatorcolor_config)
Percolator)	view_text)__doc__darwin               Arial   )r   r   ZboldzLucida Console
   normal   d      	                        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.7/__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   sJ  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!|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   Znews)rowZ
columnspanstickyz --- z#ddf)r      r   )Zheighttextr4   fontr/   r.   z START Zwhitez#fed)r8   r9   fgZdisabledforegroundcommandz STOP z CLEAR )r   r   )r5   columnr6   padxZew)r5   r<   r6   FzChoose example from menublack)4ZTkrootturtle_roottitleZwm_protocol_destroyr   
subprocessrunformatr%   getpidZ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   r8   Zinsertfilterr   dirtyexitflagloadfile	configGUIDISABLEDSTARTUPstate)selffilenamer?   rD   Zpaner"   r"   r#   __init__   sn    










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)r_   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 )Nr8   r   Znone-   )namer=   wrapwidthvbar)rh   r;   )sidefillhbar)rh   r3   ZyscrollcommandZxscrollcommandr9   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	   )rl   rm   expand)ZFrame
text_frameZTextr8   r   Z	Scrollbarrk   ZyviewpackZLEFTYrL   rn   ZxviewZBOTTOMXsettupletxtfontr   Zbind_alldecrease_sizeincrease_sizebindupdate_mousewheelZBOTH)r_   r?   rp   r8   rk   rn   Zshortcutr"   r"   r#   rN      s.    



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/   )r@   Z_ScreenrA   rc   rd   ZScrolledCanvasrb   ZadjustScrollsZ_rootwindowry   rf   ZScreenscreenTurtleScreenra   scanvasZ	RawTurtleZscreens)r_   r?   ZcanvasZ_s_r"   r"   r#   rO      s     

zDemoWindow.makeGraphFramec             C   s(   |t d< tt | jd< d| | jd< d S )Nr	   r9   zFont size %dr8   )rv   ru   r8   rP   )r_   sizer"   r"   r#   set_txtsize   s    zDemoWindow.set_txtsizec             C   s   |  ttd d t dS )Nr	   break)r   maxrv   MINIMUM_FONT_SIZE)r_   dummyr"   r"   r#   rw      s    zDemoWindow.decrease_sizec             C   s   |  ttd d t dS )Nr	   r   )r   minrv   MAXIMUM_FONT_SIZE)r_   r   r"   r"   r#   rx     s    zDemoWindow.increase_sizec             C   s$   |j dk t kr|  S |  S d S )Nr   )Zdeltar   rw   rx   )r_   re   r"   r"   r#   rz     s    zDemoWindow.update_mousewheel bluec             C   sh   | j j||tkrdndd | jj||tkr0dndd | jj||tkrLdndd | jj||d d S )Nz#d00z#fca)r^   r4   )r8   r:   )rS   configNORMALrU   rW   rP   )r_   startstopclearZtxtZcolorr"   r"   r#   r[     s    zDemoWindow.configGUIc                s>   t |}x0t D ]&}|f fdd	}|j|dt|d qW |S )Nc                s     |  d S )N)rZ   )r!   )r_   r"   r#   load  s    z)DemoWindow.makeLoadDemoMenu.<locals>.loadr   )r1   r2   r9   r;   )rH   r(   add_commandmenufont)r_   masterr0   r!   r   r"   )r_   r#   rI     s    zDemoWindow.makeLoadDemoMenuc                sl   t |}|jd jtd |jd jtd |  x2tD ]*}|f fdd	}|jt|dt|d q:W |S )NzDecrease (C-'-'))r1   r;   r9   zIncrease (C-'+')c                s     |  d S )N)r   )r~   )r_   r"   r#   resize)  s    z'DemoWindow.makeFontMenu.<locals>.resizer   )r1   r2   r9   r;   )rH   r   rw   r   rx   Zadd_separator
font_sizesstr)r_   r   r0   r~   r   r"   )r_   r#   rJ      s    


zDemoWindow.makeFontMenuc                s@   t |}x2tD ]*\}}||f fdd	}|j|t|d qW |S )Nc                s   t  j| | d S )N)r   r?   )
help_label	help_file)r_   r"   r#   show3  s    z%DemoWindow.makeHelpMenu.<locals>.show)r1   r9   r;   )rH   help_entriesr   r   )r_   r   r0   r   r   r   r"   )r_   r#   rK   /  s
    zDemoWindow.makeHelpMenuc             C   s   | j r| j  d| _ d S )NF)rX   r{   r   )r_   r"   r"   r#   refreshCanvas8  s    
zDemoWindow.refreshCanvasc          	   C   s   |    dtj_d| }t| tj| | _t| jj	d}|
 }W d Q R X | 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)rV   r@   r|   _RUNNING
__import__sysmodulesmoduleopen__file__readr8   deleteinsertr?   rB   r[   r   r\   READYr^   )r_   r`   modnamefcharsr"   r"   r#   rZ   =  s    
zDemoWindow.loadfilec             C   s   |    d| _dtj_| tttdd | j	  | j
d t| _y$| j }|dkr`t| _nt| _W n. tjk
r   | jd krd S t| _d}Y nX | 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   rX   r@   r|   r   r[   r\   r   r{   r   modeRUNNINGr^   r   mainEVENTDRIVENDONEZ
Terminatorr?   rY   )r_   resultr"   r"   r#   rR   L  s2    









zDemoWindow.startDemoc             C   s4   |    | jd | jjdd | ttt d S )Nallr   )Zcursor)r   r{   Z_deleter}   r   r[   r   r\   )r_   r"   r"   r#   rV   i  s    zDemoWindow.clearCanvasc             C   s2   | j r&|   d| _ | tttdd dtj_d S )NFzSTOPPED!r   )rY   rV   r[   r   r\   r@   r|   r   )r_   r"   r"   r#   rT   o  s    
zDemoWindow.stopItc             C   s   dt j_| j  d | _d S )NF)r@   r|   r   r?   Zdestroy)r_   r"   r"   r#   rC   w  s    
zDemoWindow._destroy)N)N)N)r   r   )__name__
__module____qualname__ra   rf   rN   rO   r   rw   rx   rz   r[   rI   rJ   rK   r   rZ   rR   rV   rT   rC   r"   r"   r"   r#   r)      s$   
D


	
	r)   c              C   s   t  } | j  d S )N)r)   r?   Zmainloop)Zdemor"   r"   r#   r   }  s    r   __main__)'r   r%   ZtkinterZidlelib.colorizerr   r   Zidlelib.percolatorr   Zidlelib.textviewr   Z
turtledemor   Zabout_turtledemor@   pathdirnameabspathr   r'   platformr   r]   r   r   r   r   r   r   rQ   rv   r   r   r   r(   r   objectr)   r   r   r"   r"   r"   r#   <module>X   s:   


 ~
