Tkinter "withdraw" and "askstring" problem

Jeff Epler jepler at unpythonic.net
Tue Apr 12 09:58:22 EDT 2005


The answer has to do with a concept Tk calls "transient".  
    wm transient window ?master?
        If master is specified, then the window manager is informed that
        window  is  a  transient window (e.g. pull-down menu) working on
        behalf of master (where master is the path name for a  top-level
        window).   If master is specified as an empty string then window
        is marked as not being a transient window any  more.   Otherwise
        the command returns the path name of window’s current master, or
        an empty string if window isn’t currently a transient window.  A
        transient  window  will  mirror  state changes in the master and
        inherit the state of the master when initially mapped. It is  an
        error to attempt to make a window a transient of itself.

In tkSimpleDialog, the dialog window is unconditionally made transient
for the master.  Windows is simply following the documentation: The
askstring window "inherit[s] the state of the master [i.e., withdrawn]
when initially mapped".

The fix is to modify tkSimpleDialog.Dialog.__init__ to only make the
dialog transient for its master when the master is viewable.  This
mirrors what is done in dialog.tcl in Tk itself.  You can either change
tkSimpleDialog.py, or you can include a new definition of __init__ with 
these lines at the top, and the rest of the function the same:
    def __init__(self, parent, title = None):
        ''' the docstring ... '''
        Toplevel.__init__(self, parent)
        if parent.winfo_viewable():
            self.transient(parent)
        ...

    # Thanks for being so dynamic, Python!
    tkSimpleDialog.Dialog.__init__ = __init__; del __init__

Jeff
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20050412/8f6ba7a9/attachment.sig>


More information about the Python-list mailing list