\d-dZddlTddlmZmZddlmZGddZGddeZdd Zd Z Gd d eZ Gdde Z dZ Gdde Z dZGdde ZdZedkrdZed Sd S)a&This modules handles dialog boxes. It contains the following public symbols: SimpleDialog -- A simple but flexible modal dialog box Dialog -- a base class for dialogs askinteger -- get an integer from the user askfloat -- get a float from the user askstring -- get a string from the user )*)_get_temp_root_destroy_temp_root) messageboxc:eZdZdgddddfdZdZdZdZdZdS) SimpleDialogNc|rt|||_nt||_|r4|j||j|t |jt |j|d|_|jdtt|j|_ |j ||_ ||_ ||_ |jd|jt!t#|D]i}||} t%|j | ||fd} ||kr| t(d | t*td j|jd |j|j|t3|j|dS) N)class_i)textaspect)expandfillc,||SN)doneselfnums %..\python\lib\tkinter\simpledialog.pyz'SimpleDialog.__init__..9s499S>>r command)relief borderwidth)siderrWM_DELETE_WINDOW)Toplevelroottitleiconname _setup_dialogMessagemessagepackBOTHFrameframercanceldefaultbind return_eventrangelenButtonconfigRIDGELEFTprotocolwm_delete_window transient _place_window) rmasterr buttonsr.r-r$r rsbs r__init__zSimpleDialog.__init__!s  ) 777DII ((DI  & IOOE " " " I  u % % %di   tytC@@@  ...49%%     z4#4555W&& 3 3C Atz,0c I I ILLLAg~~1555 FF4F 2 2 2 2 -t/DEEE F###di(((((rc|j|j|j|j|jSr)r#wait_visibilitygrab_setmainloopdestroyrrs rgozSimpleDialog.goAsY !!###   xrc~|j|jdS||jdSr)r.r#bellrrevents rr0zSimpleDialog.return_eventHs< <  INN      IIdl # # # # #rc~|j|jdS||jdSr)r-r#rHrrEs rr8zSimpleDialog.wm_delete_windowNs< ;  INN      IIdk " " " " "rcF||_|jdSr)rr#quitrs rrzSimpleDialog.doneTs! r)__name__ __module__ __qualname__r?rFr0r8rrrrrsu"d4D))))@$$$ ### rrcHeZdZdZd dZdZdZdZd dZd dZ d Z d Z dS) DialogzZClass to open dialogs. This class is intended as a base class for custom dialogs Nc |}|t}t||||)|r|||r||t|||_d|_ t|}| ||_ | dd||j ||_ |d|jt#|||j ||||dS)zInitialize a dialog. Arguments: parent -- a parent window (the application window) title -- the dialog title N)padxpadyr!)rr"r?withdrawwinfo_viewabler9r$r&parentresultr+body initial_focusr) buttonboxr7r-r: focus_setrArB wait_window)rrZr$r;r\s rr?zDialog.__init__`sh >#%%F$'''   &"7"7"9"9  NN6 " " "   JJu   d  T{{!YYt__ qq !!!    %!%D  ($+666dF### $$&&&   rcpd|_t|t|jdS)zDestroy the windowN)r]r"rDrr;rEs rrDzDialog.destroys4!4;'''''rcdS)zcreate dialog body. return widget that should have initial focus. This method should be overridden, and is called by the __init__ method. NrQ)rr;s rr\z Dialog.body  rct|}t|dd|jt}|t ddt|dd|j}|t dd|d|j|d |j|d S) z[add standard button box. override if you do not want the standard buttons OK )r widthrr.rU)r rVrWCancel)r rgrrzN)r+r3okACTIVEr)r6r-r/)rboxws rr^zDialog.buttonboxs Dkk 3TTWf M M M Dqq))) 3XR E E E Dqq))) *dg&&& *dk***  rc8|s|jdS|| ||dS#|wxYwr)validater]r_rXupdate_idletasksapplyr-rIs rriz Dialog.oks}}    ( ( * * * F    JJLLL KKMMMMMDKKMMMMs BBcn|j|j|dSr)rZr_rDrIs rr-z Dialog.cancels1 ; " K ! ! # # # rcdS)zvalidate the data This method is called automatically to validate the data before the dialog is destroyed. By default, it always validates OK. rrQrEs rrnzDialog.validates qrcdS)zprocess the data This method is called automatically to process the data, *after* the dialog is destroyed. By default, it does nothing. NrQrEs rrpz Dialog.applyrcrr) rNrOrP__doc__r?rDr\r^rir-rnrprQrrrSrSYs 1111f(((   *         rrSNc|||}|}|}|}||r|||z dzz}| | |z dzz}| }| } t|||z|z }t||}t|| |z|z }t|| }|jdkrt|d}n4||z dz}||z dz}||||d||fz|dS)Naquaz+%d+%d) wm_withdrawrowinfo_reqwidthwinfo_reqheightwinfo_vrootwidthwinfo_vrootheightwinfo_ismapped winfo_rootx winfo_width winfo_rooty winfo_height winfo_vrootx winfo_vrootyminmax_windowingsystemwinfo_screenwidthwinfo_screenheight wm_maxsize wm_geometry wm_deiconify) rlrZminwidth minheightmaxwidth maxheightxyvrootxvrootys rr:r:sMMOOO!!H!!##I!!##H##%%I f3355    F$6$6$8$88$C#I I    F$7$7$9$9I$E!#K K!!!! 6H$x/ 0 0 6NN 6I% 1 2 2 6NN  ' 'Ar A  " "X -! 3  ! ! # #i /A 5LL9%%%MM(aV#$$$NNrc|jdkr |jdd|dddS|jdkr|dddSdS) Nrwz!::tk::unsupported::MacWindowStylestyle moveableModalr x11z-typedialog)rtkcall wm_attributes)rls rr&r&snV##  5w_b * * * * * u $ $ ***** % $rc.eZdZ ddZdZdZdZdS) _QueryDialogNcv||_||_||_||_t|||dSr)promptminvaluemaxvalue initialvaluerSr?)rr$rrrrrZs rr?z_QueryDialog.__init__s=      (fe,,,,,rcHd|_t|dSr)entryrSrDrEs rrDz_QueryDialog.destroys! trct||jt}|ddtt |d|_|jddttz|j@|j d|j|j dt|jS)N)r justifyrrU)rowrVstickyr)namer) Labelrr6gridWEntryrErinsert select_rangeEND)rr;rls rr\z_QueryDialog.body!s &t{D 9 9 9 11Q'''6000  AAac222   ( J  a!2 3 3 3 J # #As + + +zrcl |}n0#t$r#tjd|jdz|YdSwxYw|j,||jkr!tjdd|jz|dS|j,||jkr!tjdd|jz|dS||_d S) Nz Illegal valuez Please try again)rZrz Too smallz2The allowed minimum value is %s. Please try again.z Too largez2The allowed maximum value is %s. Please try again.r) getresult ValueErrorr showwarning errormessagerrr[)rr[s rrnz_QueryDialog.validate/s  ^^%%FF     "!$88     11   = $$-)?)?  "$&*m4      1 = $$-)?)?  "$&*m4      1 qs)AA)NNNN)rNrOrPr?rDr\rnrQrrrrs`#-1 - - - -   rrceZdZdZdZdS) _QueryIntegerzNot an integer.cZ||jSr)getintrgetrEs rrz_QueryInteger.getresultTs {{4:>>++,,,rNrNrOrPrrrQrrrrQs($L-----rrc ,t||fi|}|jS)zget an integer from the user Arguments: title -- the dialog title prompt -- the label text **kw -- see SimpleDialog class Return value is an integer )rr[r$rkwds r askintegerrXs" eV**r**A 8OrceZdZdZdZdS) _QueryFloatzNot a floating point value.cZ||jSr) getdoublerrrEs rrz_QueryFloat.getresultjs ~~djnn..///rNrrQrrrrgs(0L00000rrc ,t||fi|}|jS)zget a float from the user Arguments: title -- the dialog title prompt -- the label text **kw -- see SimpleDialog class Return value is a float )rr[rs raskfloatrns" E6((R((A 8Orc eZdZdZdZdZdS) _QueryStringchd|vr|d|_|d=nd|_tj|g|Ri|dS)Nshow)_QueryString__showrr?)rargsrs rr?z_QueryString.__init__~sM R<<V*DK6 DKd0T000R00000rct||}|j||j|S)N)r)rr\r configure)rr;rs rr\z_QueryString.bodys:!!$// ; " OOO - - - rc4|jSr)rrrEs rrz_QueryString.getresultsz~~rN)rNrOrPr?r\rrQrrrr}sA111      rrc ,t||fi|}|jS)zget a string from the user Arguments: title -- the dialog title prompt -- the label text **kw -- see SimpleDialog class Return value is a string )rr[rs r askstringrs" UF))b))A 8Or__main__ct}|fd}t|d|}|t|d|j}||dS)Nc.t|dgdddd}t|ttddd tt dd d d tt dddS)NzThis is a test dialog. Would this have been an actual dialog, the buttons below would have been glowing in soft pink light. Do you believe this?)YesNorhrrvz Test Dialog)r r<r.r-r$Spamz Egg count)rzEgg weight (in tons)rd)rrz Egg label)rprintrFrrr)r#rs rdoitztest..doitsT5 "9!8!8!" !, . . .A !$$&&MMM *V[uEEE F F F (6#:Q$'))) * * * )FK00 1 1 1 1 1rTestrQuit)Tkr3r)rMrC)r#rtqs rtestrsytt 2 2 2 2 4fd 3 3 3  4faf 5 5 5  rr)rttkinterrrrrr"rSr:r&rrrrrrrrNrrQrrrs  6666666677777777tI I I I I XI I I \:+++@@@@@6@@@F-----L---   00000,000        <   &    z0 DFFFFF5r