a 4êdg-ã@s\ddlZddgZdd„ZGdd„dƒZGdd„dƒZGdd „d ƒZd d „Zed krXeƒdS) éNÚ dnd_startÚ DndHandlercCst||ƒ}|jr|SdSdS©N)rÚroot)ÚsourceÚeventÚh©r ú'/usr/local/lib/python3.9/tkinter/dnd.pyrms c@sDeZdZdZdd„Zdd„Zdd„Zdd „Zdd d „Zdd d„Z dS)rNcCs®|jdkrdS|j ¡}z |jWdStyB||_||_Yn0||_d|_|j|_}|j|_ }d||f|_ |dp€d|_ |  |j |j ¡|  d|j¡d|d<dS)NézÚcursorÚúZhand2)ÚnumÚwidgetÚ_rootÚ_DndHandler__dndÚAttributeErrorrrÚtargetZinitial_buttonÚinitial_widgetÚrelease_patternÚ save_cursorÚbindÚ on_releaseÚ on_motion)ÚselfrrrZbuttonrr r r Ú__init__{s$      zDndHandler.__init__cCs0|j}d|_|r,z|`Wnty*Yn0dSr)rrr©rrr r r Ú__del__s zDndHandler.__del__c Cs°|j|j}}|j ||¡}|j}d}|r`z |j}WntyFYn0|||ƒ}|rXq`|j}q&|j}||ur€|r¬|  ||¡n,|r–d|_|  ||¡|r¬|  ||¡||_dSr) Úx_rootÚy_rootrZwinfo_containingrÚ dnd_acceptrZmasterrÚ dnd_motionÚ dnd_leaveÚ dnd_enter) rrÚxÚyZ target_widgetrÚ new_targetÚattrZ old_targetr r r r˜s.     zDndHandler.on_motioncCs| |d¡dS)Né©Úfinish©rrr r r r³szDndHandler.on_releasecCs| |d¡dS)Nrr*r,r r r Úcancel¶szDndHandler.cancelrc Csž|j}|j}|j}|j}zr|`|j |j¡|j d¡|j|d<d|_|_|_|_|r||rp| ||¡n |  ||¡W|  ||¡n|  ||¡0dS)Nrr ) rrrrrZunbindrrÚ dnd_commitr#Údnd_end)rrZcommitrrrrr r r r+¹s  zDndHandler.finish)N)r) Ú__name__Ú __module__Ú __qualname__rrrrrr-r+r r r r rws  c@sNeZdZdd„Zddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dS)ÚIconcCs||_d|_|_|_dSr)ÚnameÚcanvasÚlabelÚid)rr4r r r rÒsz Icon.__init__é cCs€||jur |j |j||¡dS|jr.| ¡|s6dStj||jddd}|j|||dd}||_||_||_|  d|j ¡dS)NéZraised)ÚtextZ borderwidthZreliefZnw)ZwindowÚanchorz ) r5Úcoordsr7ÚdetachÚtkinterZLabelr4Z create_windowr6rÚpress)rr5r%r&r6r7r r r ÚattachÖs  ÿz Icon.attachcCsB|j}|sdS|j}|j}d|_|_|_| |¡| ¡dSr)r5r7r6ÚdeleteZdestroy)rr5r7r6r r r r=æs z Icon.detachcCs4t||ƒr0|j|_|j|_|j |j¡\|_|_ dSr) rr%Úx_offr&Úy_offr5r<r7Úx_origÚy_origr,r r r r?ðs z Icon.presscCs(| |j|¡\}}|j |j||¡dSr)Úwherer5r<r7)rrr%r&r r r Úmoveøsz Icon.movecCs|j |j|j|j¡dSr)r5r<r7rDrE)rr r r Úputbacküsz Icon.putbackcCs8| ¡}| ¡}|j|}|j|}||j||jfSr)Z winfo_rootxZ winfo_rootyrr rBrC)rr5rZx_orgZy_orgr%r&r r r rFÿs   z Icon.wherecCsdSrr )rrrr r r r/ sz Icon.dnd_endN)r8r8) r0r1r2rr@r=r?rGrHrFr/r r r r r3Ðs   r3c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)ÚTestercCs>t |¡|_tj|jddd|_|jjddd|j|j_dS)Néd)ÚwidthZheightZbothr))ÚfillÚexpand)r>ZToplevelÚtopZCanvasr5Úpackr!rr r r rs zTester.__init__cCs|Srr ©rrrr r r r!szTester.dnd_acceptc Csp|j ¡| |j|¡\}}|j |j¡\}}}}||||} } |j |||| || ¡|_| ||¡dSr)r5Ú focus_setrFÚbboxr7Zcreate_rectangleÚdndidr") rrrr%r&Úx1Úy1Úx2Úy2ZdxZdyr r r r$s  zTester.dnd_enterc CsF| |j|¡\}}|j |j¡\}}}}|j |j||||¡dSr)rFr5rRrSrG) rrrr%r&rTrUrVrWr r r r" szTester.dnd_motioncCs"|j ¡|j |j¡d|_dSr)rNrQr5rArSrPr r r r#%s zTester.dnd_leavecCs2| ||¡| |j|¡\}}| |j||¡dSr)r#rFr5r@)rrrr%r&r r r r.*s zTester.dnd_commitN) r0r1r2rr!r$r"r#r.r r r r rI s rIcCsªt ¡}| d¡tj|jdd ¡t|ƒ}|j d¡t|ƒ}|j d¡t|ƒ}|j d¡tdƒ}tdƒ}td ƒ}|  |j ¡|  |j ¡|  |j ¡|  ¡dS) Nz+1+1ZQuit)Zcommandr:z+1+60z+120+60z+240+60ZICON1ZICON2ZICON3) r>ZTkZgeometryZButtonÚquitrOrIrNr3r@r5Zmainloop)rÚt1Út2Zt3Zi1Zi2Zi3r r r Útest0s        r[Ú__main__)r>Ú__all__rrr3rIr[r0r r r r Úfs Y=#