U e5d�-�@s�dZddlTddlmZmZGdd�d�ZGdd�de�Zdd �ZGd d �d e�ZGd d �d e�Z dd�Z Gdd�de�Z dd�Z Gdd�de�Z dd�Zedkr�dd�Ze�dS)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 �)�*)� messagebox�_get_default_rootc@sLeZdZdgddddfdd�Zddd�Zd d �Zd d �Zd d�Zdd�ZdS)� SimpleDialog�Nc Cs|rt||d�|_n t|�|_|r:|j�|�|j�|�t|j�t|j|dd�|_|jjdtd�t |j�|_ |j ��||_ ||_ ||_ |j�d|j�tt|��D]L}||} t|j | ||fdd�d �} ||kr�| jtd d �| jttdd �q�|j�d |j�|�|�dS)N)�class_i�)�textZaspect�)�expand�fill�cSs |�|�S�N)�done��self�num�r�,/usr/lib64/python3.8/tkinter/simpledialog.py�8�z'SimpleDialog.__init__..�r�command�)ZreliefZ borderwidth)�sider r �WM_DELETE_WINDOW)�Toplevel�root�titleZiconname� _setup_dialogZMessage�message�packZBOTH�Frame�framer�cancel�default�bind� return_event�range�len�ButtonZconfigZRIDGE�LEFT�protocol�wm_delete_window�_set_transient) r�masterr�buttonsr$r#rrr�s�brrr�__init__ s2       �zSimpleDialog.__init__��?�333333�?c Cs|j}|��|�|�|��|��rJ|��}|��}|��}|��}n|� �}|� �}d}}|� �} |� �} ||| |} ||| |} | | |� �kr�|� �| } n | dkr�d} | | |� �kr�|� �| } n | dkr�d} |� d| | f�|��dS)Nr�+%d+%d)r�withdraw� transient�update_idletasksZwinfo_ismappedZ winfo_widthZ winfo_height� winfo_rootx� winfo_rootyZwinfo_screenwidthZwinfo_screenheightZwinfo_reqwidthZwinfo_reqheight�geometry� deiconify) rr.ZrelxZrelyZwidgetZm_widthZm_heightZm_xZm_yZw_widthZw_height�x�yrrrr-?s4  zSimpleDialog._set_transientcCs.|j��|j��|j��|j��|jSr )r�wait_visibility�grab_set�mainloop�destroyr�rrrr�go\s     zSimpleDialog.gocCs&|jdkr|j��n |�|j�dSr )r$r�bellr�rZeventrrrr&cs  zSimpleDialog.return_eventcCs&|jdkr|j��n |�|j�dSr )r#rrErrCrrrr,is  zSimpleDialog.wm_delete_windowcCs||_|j��dSr )rr�quitrrrrroszSimpleDialog.done)r3r4) �__name__� __module__� __qualname__r2r-rDr&r,rrrrrrs�  rc@sVeZdZdZddd�Zdd�Zdd�Zd d �Zdd d �Zdd d�Z dd�Z dd�Z dS)�DialogzZClass to open dialogs. This class is intended as a base class for custom dialogs NcCs�|}|std�}t�||�|��|dk r>|��r>|�|�|rL|�|�t|�||_d|_ t |�}|� |�|_ |j ddd�|��|j s�||_ |�d|j�|dk r�|�d|��d|��df�|��|j ��|��|��|�|�dS)z�Initialize a dialog. Arguments: parent -- a parent window (the application window) title -- the dialog title zcreate dialog windowN�)�padx�padyrr5�2)rrr2r6Zwinfo_viewabler7rr�parent�resultr!�body� initial_focusr � buttonboxr+r#r;r9r:r<� focus_setr?r@Z wait_window)rrPrr.rRrrrr2{s8      � zDialog.__init__cCsd|_t�|�dS)zDestroy the windowN)rSrrBrCrrrrB�szDialog.destroycCsdS)z�create dialog body. return widget that should have initial focus. This method should be overridden, and is called by the __init__ method. Nr)rr.rrrrR�sz Dialog.bodycCsvt|�}t|dd|jtd�}|jtddd�t|dd|jd�}|jtddd�|�d|j�|�d |j�|��d S) z[add standard button box. override if you do not want the standard buttons ZOK� )r�widthrr$rL)rrMrN�Cancel)rrWrr zN)r!r)�okZACTIVEr r*r#r%)rZbox�wrrrrT�szDialog.buttonboxcCsB|��s|j��dS|��|��z |��W5|��XdSr )�validaterSrUr6r8r#�applyrFrrrrY�s  z Dialog.okcCs |jdk r|j��|��dSr )rPrUrBrFrrrr#�s  z Dialog.cancelcCsdS)z�validate the data This method is called automatically to validate the data before the dialog is destroyed. By default, it always validates OK. r rrCrrrr[�szDialog.validatecCsdS)z�process the data This method is called automatically to process the data, *after* the dialog is destroyed. By default, it does nothing. NrrCrrrr\�sz Dialog.apply)N)N)N) rHrIrJ�__doc__r2rBrRrTrYr#r[r\rrrrrKts 7    rKcCs:|jdkr |j�dd|dd�n|jdkr6|�dd�dS) NZaquaz!::tk::unsupported::MacWindowStyleZstyleZ moveableModalrZx11z-typeZdialog)Z_windowingsystemZtkZcallZ wm_attributes)rZrrrrs  � rc@s.eZdZd dd�Zdd�Zdd�Zdd �ZdS) � _QueryDialogNcCs*||_||_||_||_t�|||�dSr )�prompt�minvalue�maxvalue� initialvaluerKr2)rrr_rbr`rarPrrrr2s z_QueryDialog.__init__cCsd|_t�|�dSr )�entryrKrBrCrrrrBsz_QueryDialog.destroycCsrt||jtd�}|jddtd�t|dd�|_|jjddttd�|jdk rl|j� d|j�|j� dt �|jS)N)rZjustifyrrL)�rowrMZstickyrc)�namer ) ZLabelr_r*Zgrid�WZEntryrc�Erb�insertZ select_rangeZEND)rr.rZrrrrR s z_QueryDialog.bodycCs�z |��}Wn,tk r8tjd|jd|d�YdSX|jdk rh||jkrhtjdd|j|d�dS|jdk r�||jkr�tjdd|j|d�dS||_d S) Nz Illegal valuez Please try again)rPrz 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� errormessager`rarQ)rrQrrrr[.s: �����z_QueryDialog.validate)NNNN)rHrIrJr2rBrRr[rrrrr^ s� r^c@seZdZdZdd�ZdS)� _QueryIntegerzNot an integer.cCs|�|j���Sr )Zgetintrc�getrCrrrriSsz_QueryInteger.getresultN�rHrIrJrlrirrrrrmPsrmcKst||f|�}|jS)z�get an integer from the user Arguments: title -- the dialog title prompt -- the label text **kw -- see SimpleDialog class Return value is an integer )rmrQ�rr_�kw�drrr� askintegerWs rsc@seZdZdZdd�ZdS)� _QueryFloatzNot a floating point value.cCs|�|j���Sr )Z getdoublercrnrCrrrriisz_QueryFloat.getresultNrorrrrrtfsrtcKst||f|�}|jS)z�get a float from the user Arguments: title -- the dialog title prompt -- the label text **kw -- see SimpleDialog class Return value is a float )rtrQrprrr�askfloatms ruc@s$eZdZdd�Zdd�Zdd�ZdS)� _QueryStringcOs6d|kr|d|_|d=nd|_tj|f|�|�dS)N�show)�_QueryString__showr^r2)r�argsrqrrrr2}s  z_QueryString.__init__cCs(t�||�}|jdk r$|j|jd�|S)N)rw)r^rRrxZ configure)rr.rcrrrrR�s  z_QueryString.bodycCs |j��Sr )rcrnrCrrrri�sz_QueryString.getresultN)rHrIrJr2rRrirrrrrv|srvcKst||f|�}|jS)z�get a string from the user Arguments: title -- the dialog title prompt -- the label text **kw -- see SimpleDialog class Return value is a string )rvrQrprrr� askstring�s rz�__main__cCsLt�}|fdd�}t|d|d�}|��t|d|jd�}|��|��dS)NcSs^t|ddddgdddd�}t|���ttd d d d ��ttd d ddd��ttd d��dS)Nz�This 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?ZYesZNorXr�z Test Dialog)rr/r$r#rZSpamz Egg count�)rbzEgg weight (in tons)r �d)r`raz Egg label)r�printrDrsrurz)rrrrrr�doit�s�  �ztest..doitZTestrZQuit)ZTkr)r rGrA)rr��t�qrrr�test�s r�N)r]ZtkinterrrrrrKrr^rmrsrtrurvrzrHr�rrrr� s V C