Eric Brunel wrote:
On Tue, 29 Mar 2005 10:37:10 GMT, max(01)* <ma**@fisso.casa> 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()