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