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