windows

Peter Abel PeterAbel at gmx.net
Wed Oct 13 19:22:09 CEST 2004


Ajay <abra9823 at mail.usyd.edu.au> wrote in message news:<mailman.4811.1097649067.5135.python-list at python.org>...
> hi!
> 
> i have two tkinter windows on top of each other. i would like it so that
> the user has to complete the fields in the top windows before they can
> interact with the window below it. that is, i dont want the user to close
> the top window or minimize it or send it into the background.
> 
> how would i do it?
> 
> thanks
> 
> cheers
> 
> 
> 
> 
> 
> 
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.

There are documentations which say that Tkinter.Toplevel has
a methode .transient(root) which should make the Toplevel window
transient to its root window.
But I never managed to make it work.(W2K Python 2.2.2).
But here is a hackaround:

import Tkinter

#----------------------
def deiconify(widget):
#----------------------
  widget.deiconify()
  widget.grab_set()

#----------------------
def withdraw(widget):
#----------------------
  widget.grab_release()
  widget.withdraw()

# The root window
root=Tkinter.Tk()

# The Toplevel window
tl=Tkinter.Toplevel(root,width=400,height=200,bg='white')

# Withdraw Toplevel, when destroyed
tl.protocol("WM_DELETE_WINDOW",lambda w=tl:withdraw(w))

# Make Toplevel not resizable
tl.resizable(width=False,height=False)

# Default state of Toplevel is withdrawn
tl.withdraw()

# Give Toplevel window a title
tl.title('Toplevel-Window')

# A Button on the root window to make Toplevel window visible
Tkinter.Button(root,text='Toplevel on',command=lambda w=tl:deiconify(w)).pack()

# Start mainloop
root.mainloop()

Regards
Peter



More information about the Python-list mailing list