Problema con ventana
Luis Orellana Orihuela
luis.ore.ori en gmail.com
Dom Dic 16 18:25:06 CET 2007
Gracias Gabriel, ahora funciona. Me ha servido de mucho el código ;)
El día 13/12/07, Gabriel Genellina <gagsl-py2 en yahoo.com.ar> escribió:
>
> En Wed, 12 Dec 2007 05:51:43 -0300, Luis Orellana Orihuela
> <luis.ore.ori en gmail.com> escribi�:
>
> > Reanudo el hilo que llevaba en mi anterior cuenta:
> >
> > No me enrollo y simplifico. Tenemos esta aplicación:
> >
> > from Tkinter import *
> > from tkMessageBox import showinfo
> >
> > form = Tk()
> > form.withdraw()
> > showinfo(title='Titulo ventana', message='hola mundo')
> > print "llega??"
> >
> > ¿Hay alguna forma de que se ejecute la linea* print "llega??" *sin tener
> > que
> > esperar que se cierre o acepte la ventana showinfo? es decir, trato de
> > que
> > la aplicación siga su curso sin que se quede esperando un evento que
> > interactúe con la ventana. El objetivo es mostrar el mensaje y seguir,
> > sin
> > necesidad de saber lo que se hace con la ventana. Gracias
>
> Lo que estas buscando es una caja de dialogo no modal. Los dialogos
> estandar (como showinfo) son modales (es decir, la aplicacion se queda
> esperando la respuesta del usuario) porque a) es lo mas comun y b) es la
> parte dificil de hacer.
> Para mostrar un mensaje y continuar, simplemente se crea una ventana
> adecuada (Toplevel) y ya esta.
> Aca hay un ejemplo basado en tkSimpleDialog. Lo importante fue *quitar* la
> llamada a widget.wait_window(window) que es la que inicia el loop de
> mensajes local y lo hace modal.
>
> # modelessdialog.py
> #
> # Soporte para dialogos no modales
> # Gabriel Genellina
> #
> # Basado en tkSimpleDialog.py Copyright (c) 1997 by Fredrik Lundh
>
> from Tkinter import *
>
> class ModelessDialog(Toplevel):
>
> def __init__(self, parent, title = None):
>
> Toplevel.__init__(self, parent)
>
> if parent.winfo_viewable():
> self.transient(parent)
>
> if title:
> self.title(title)
>
> self.parent = parent
>
> body = Frame(self)
> self.body(body)
> body.pack(padx=5, pady=5)
>
> self.buttonbox()
>
> self.protocol("WM_DELETE_WINDOW", self.close)
>
> if self.parent is not None:
> self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
> parent.winfo_rooty()+30))
>
> def body(self, master):
> # hook
> pass
>
> def buttonbox(self):
> # hook; default=[OK]
> box = Frame(self)
> w = Button(box, text="OK", width=10, command=self.close,
> default=ACTIVE)
> w.pack(side=LEFT, padx=5, pady=5)
> self.bind("<Return>", self.close)
> box.pack()
>
> def close(self, event=None):
> if self.parent is not None:
> self.parent.focus_set()
> self.destroy()
>
> class MessageDialog(ModelessDialog):
>
> def __init__(self, parent, title=None, message=''):
> self.message = message
> ModelessDialog.__init__(self, parent, title)
>
> def body(self, master):
> w = Label(master, text=self.message, justify=LEFT)
> w.grid(row=0, padx=5, sticky=W)
>
> if __name__ == '__main__':
>
> root = Tk()
> frame = Frame(root)
>
> def mostrar_mensajes(frame=frame):
> MessageDialog(frame, 'Titulo de la ventana',
> 'Este es el texto '
> 'del mensaje. Puede ser bastante largo.\n'
> 'Tambien puede tener varias lineas')
> MessageDialog(frame, 'Doblete',
> 'Claro, como no es modal, puede haber '
> 'varios MessageDialog simultaneamente.')
>
> Button(frame, text='Test', command=mostrar_mensajes).pack(side=LEFT)
> Button(frame, text='Fin', command=frame.quit).pack(side=LEFT)
> frame.pack()
> root.mainloop()
>
> --
> Gabriel Genellina
>
>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
Más información sobre la lista de distribución Python-es