On Tue, 29 Mar 2005 10:37:10 GMT, max(01)* <[EMAIL PROTECTED]> wrote:
hi people.
when i create a widget, such as a toplevel window, and then i destroy it, how can i test that it has been destroyed? the problem is that even after it has been destroyed, the instance still exists and has a tkinter name, so testing for None is not feasible:
>>> import Tkinter >>> fin = None >>> fin1 = Tkinter.Toplevel() >>> fin1.destroy() >>> print fin1 .1075951116
The winfo_exists method is what you want:
print fin1.winfo_exists()
0
However, I'm curious about *why* you want to do that: since *you* made the call to destroy, what would you want to do anything with a widget you've already destroyed?
my main window has a button that opens another toplevel window. this button is bound to a method that creates the window and does some other processing *only if* the windows does not exist yet (otherwise, the user could click more on the button and multiple copies of the window would pop up, which is not what i want... in fact what i do is to assign None to a variable called self.dialogo in my main application code, then i do self.dialogo = Toplevel() inside the method...)
in this precise moment, though, it comes to my mind that i could achieve the purpose simply activating/deactivating the button according to a flag...
anyway, i attach the code, so you can see better what i mean...
anyone who has to say anything about is welcome of course...
it is a tentative adapration of a program found in the tcl/tk package demo
---cut here---
from Tkinter import *
class MiaApp: def __init__(self, genitore):
self.mioGenitore = genitore self.fonte = ("Helvetica", 12) self.fonteVar = ("Helvetica", 14)
self.quadro_grande = Frame(genitore) self.quadro_grande.pack(expand = YES, fill = BOTH)
self.msg = Label(self.quadro_grande) self.msg.configure( font = self.fonte, wraplength = "10c", justify = LEFT, text = u"Sono qui sotto presentati tre pulsanti a spunta. \ Premendo un pulsante, se ne varia lo stato di selezione e si \ imposta una variabile a un valore che indica lo stato del \ pulsante stesso. Premendo il pulsante \u00ABMostra \ Variabili\u00BB si possono vedere i valori correnti delle \ variabili." ) self.msg.pack(side = TOP)
self.pulsanti = Frame(self.quadro_grande) self.pulsanti.pack(side = BOTTOM, fill = X, padx = "2m")
self.pulsanti_spunta = Frame(self.quadro_grande) self.pulsanti_spunta.pack(side = TOP, fill = X, padx = "2m")
self.annulla = Button(self.pulsanti) self.annulla.configure( text = "Annulla", command = self.mioGenitore.destroy ) self.annulla.pack(side = LEFT, expand = YES)
self.var = Button(self.pulsanti) self.var.configure( text = "Mostra Variabili", command = self.pulsanteMostraVariabiliPremuto ) self.var.pack(side = LEFT, expand = YES)
self.tergicristalli = IntVar() self.b1 = Checkbutton(self.pulsanti_spunta) self.b1.configure( text = "Tergicristalli a posto", variable = self.tergicristalli, relief = FLAT ) self.b1.pack( side = TOP, pady = 2, anchor = W )
self.freni = IntVar() self.b2 = Checkbutton(self.pulsanti_spunta) self.b2.configure( text = "Freni a posto", variable = self.freni, relief = FLAT ) self.b2.pack( side = TOP, pady = 2, anchor = W )
self.autista = IntVar() self.b3 = Checkbutton(self.pulsanti_spunta) self.b3.configure( text = "Autista sobrio", variable = self.autista, relief = FLAT ) self.b3.pack( side = TOP, pady = 2, anchor = W )
self.dialogo = None
def mostraVariabili(self, *argomenti): self.dialogo = Toplevel() self.dialogo.wm_title("Valori delle variabili")
self.dialogo.quadro_grande = Frame(self.dialogo) self.dialogo.quadro_grande.pack(expand = YES, fill = BOTH)
self.dialogo.titolo = Label(self.dialogo.quadro_grande) self.dialogo.titolo.configure( text = "Valori delle variabili:", width = 20, font = self.fonteVar ) self.dialogo.titolo.pack(side = TOP, fill = X)
lung = 1 for i in argomenti: if len(i) > lung: lung = len(i)
self.dialogo.dq = {} self.dialogo.dn = {} self.dialogo.dv = {} for i in argomenti: self.dialogo.dq[i] = Frame(self.dialogo.quadro_grande) self.dialogo.dq[i].pack( side = TOP, anchor = W, fill = X )
self.dialogo.dn[i] = Label(self.dialogo.dq[i]) self.dialogo.dn[i].configure( text = i + ": ", width = lung + 2, anchor = W ) self.dialogo.dn[i].pack( side = LEFT )
self.dialogo.dv[i] = Label(self.dialogo.dq[i]) self.dialogo.dv[i].configure( textvariable = self.freni, ### FIXME anchor = W ) self.dialogo.dv[i].pack( side = LEFT, expand = YES, fill = X )
self.dialogo.vaBene = Button(self.dialogo.quadro_grande) self.dialogo.vaBene.configure( text = "Va Bene", command = self.pulsanteVaBenePremuto, default = ACTIVE ) self.dialogo.vaBene.bind( "<Return>", self.pulsanteVaBenePremuto_a ) self.dialogo.vaBene.focus_force() self.dialogo.vaBene.pack( side = BOTTOM, pady = 2 )
def pulsanteVaBenePremuto(self): self.dialogo.destroy() self.dialogo = None
def pulsanteVaBenePremuto_a(self, evento): self.pulsanteVaBenePremuto()
def pulsanteMostraVariabiliPremuto(self): if not self.dialogo: self.mostraVariabili("self.tergicristalli", "self.freni", "self.autista") ### FIXME else: self.dialogo.lift(self.mioGenitore)
radice = Tk() radice.wm_title("Dimostrazione Pulsanti a Spunta") radice.wm_iconname("spunta") miaApp = MiaApp(radice) radice.mainloop() -- http://mail.python.org/mailman/listinfo/python-list