Problemas Entry Tkinter

Christal Berengena Moreno se05216 en salleURL.edu
Jue Jul 1 11:49:44 CEST 2004


Ostras, muchisimas gracias!
Yo estoy con python 2.2.2... quizas deberia de actualizarme a la nueva
version, pero no queria tener problemas de incompatibilidad con tkinter
(tcl8.3 y tk8.3) y con mysql (4.0.11), pmw y pil...
Intente cambiar hace un tiempo pero empezo a dar problemas y volvi a lo
anterior... mirare de actualizarme a ver que tal va todo!
Probare el codigo que me pasas a ver que tal!
Gracias de nuevo.
Christal

On Wed, 30 Jun 2004, Ernesto Revilla wrote:

> Hola,
>
> a mi me funciona (python 2.3.3). Cada vez que le doy a 'INSERTAR
> NOMBRE', me deja escribir un nombre sin problema.
>
> Pero, no es la manera de hacer ventanas modales, la verdad. De hecho, al
> poner otra aplicación delante, ya no puedo acceder a la ventana, porque
> no hay ventana. El overrideredirect(1) pasa de largo al sistema de
> ventanas. Nosotros lo usamos para crear combos u otros controles que
> queremos no sean manejados por el sistema de ventanas. Para hacer
> cuadros modales, mejor usa  w.grab_set() (cuadro modal a la aplicación)
> o w.grab_set_global() (cuadro modal a todo el escritorio).
>
> (Para quitarlo, usa w.grab_release())
>
>
> He cambiado un poco tu código, con el objetivo de hacerlo más legible.
> Cabe destacar lo siguiente:
> * se guardan solamente self.varNombre y self.ventana, las demás
> referencias no hace falta guardarlas en self.
> * los métodos de clase, normalmente son verbos y empiezan en minúscula,
> como crearVentana
> * los comandos de botón empiezan por cmd y siguen con un verbo, como
> cmdCambiarNombre
> * he usado ventana.grab_set()   y en cerrarVentana:
> ventana.grab_release() para hacer la ventana modal (respecto a la
> aplicación).
> * en botón de salida de aplicación activa root.quit en vez de root.destroy.
>
> Saludos, Erny
>
>
>
> # -*- encoding: latin1 -*-
> from Tkinter import *
> import string
>
>
> class Molde:
>     def __init__(self,parent):
>         self.raiz=parent
>         self.crearVentana()
>
>     def crearVentana(self):
>         ventana=Toplevel(self.raiz, bg='#908875', borderwidth=3,
> relief='raised')
>         ventana.geometry('400x300+250+100')
>         self.ventana=ventana    # guardar ventana, para poder destruirla
> luego.
>
>         frame=Frame(ventana, bg='#e7dfca', borderwidth=3, relief='sunken')
>         frame.place(relx=0.005, rely=0.015, relh=0.97, relw=0.99)
>
>         lbl=Label(frame,bg='#e7dfca', text="NUEVO NOMBRE",
> font=('arial','16','bold'))
>         lbl.place(relx=0.05, rely=0.25)
>
>         var=StringVar(ventana)
>         var.set("nuevo")
>         self.varNombre=var    # tenemos que acceder más tarde.
>
>         entry=Entry(ventana, bg='white', font=('arial','18','bold'),
> textvariable=var)
>         entry.place(relx=0.05, rely=0.4)
>         entry.focus()
>
>         btn=Button(frame, bg='#908875', fg='white', text="OK",
> font=('arial','16','bold'), command=self.cmdCambiarNombre)
>         btn.place(relx=0.3, rely=0.65, relh=0.15, relw=0.25)
>
>         btn=Button(frame, bg='#908875', fg='white', text="SALIR",
> font=('arial','16','bold'),command=self.cmdSalirVentana)
>         btn.place(relx=0.6, rely=0.65, relh=0.15, relw=0.25)
>
>         ventana.grab_set()
>
>     def cmdCambiarNombre(self):
>         nombre=self.varNombre.get()
>         print "nombre es: %s" % nombre
>         if nombre=='':
>             pass
>         elif len(nombre)>15:
>             pass
>         else:
>             print "nombre cambiado"+nombre
>             self.cerrarVentana()
>
>     def cmdSalirVentana(self):
>         self.cerrarVentana()
>
>     def cerrarVentana(self):
>         self.ventana.grab_release()
>         self.ventana.destroy()
>
>
> if __name__ == '__main__':
>     root=Tk()
>     root.geometry("200x100+400+300")
>     # root.overrideredirect(1)
>
>     btn=Button(root,text="INSERTAR NOMBRE",bg="blue",command=lambda
> parent=root: Molde(parent))
>     btn.pack(side=TOP, fill=BOTH, expand=YES)
>
>
>     btn=Button(root,text="SALIR",bg="orange",command=root.quit)
>     btn.pack(side=TOP, fill=BOTH, expand=YES)
>
>     root.mainloop()
>
>
>
> Christal Berengena Moreno escribió:
>
> >He hecho un "codigo de muestra" con el problema... en este tambien me pasa
> >lo mismo...
> >from Tkinter import *
> >import string
> >
> >root=Tk()
> >
> >class Molde:
> >	def __init__(self,parent):
> >		self.raizppal=parent
> >		self.CambiaNombreMolde()
> >
> >	def CambiaNombreMolde(self):
> >		self.frNombreMolde2=Toplevel(self.raizppal, bg='#908875',
> >borderwidth=3, relief='raised')
> >		self.frNombreMolde2.geometry('400x300+250+100')
> >		self.frNombreMolde2.overrideredirect(1)
> >
> >		self.frNombreMolde=Frame(self.frNombreMolde2,
> >bg='#e7dfca', borderwidth=3, relief='sunken')
> >		self.frNombreMolde.place(relx=0.005, rely=0.015,
> >relh=0.97, relw=0.99)
> >
> >
> >self.LblEntryNombreMolde=Label(self.frNombreMolde,bg='#e7dfca',
> >				text="NUEVO NOMBRE",
> >font=('arial','16','bold'))
> >		self.LblEntryNombreMolde.place(relx=0.05, rely=0.25)
> >		self.entryVarNombreMolde=StringVar()
> >		self.entryVarNombreMolde.set("nuevo")
> >		self.EntryNombreMolde=Entry(self.frNombreMolde, width=30,
> >bg='white', font=('arial','18','bold'),
> >
> >textvariable=self.entryVarNombreMolde)
> >		self.EntryNombreMolde.place(relx=0.05, rely=0.4)
> >		#~ self.EntryNombreMolde.focus()
> >
> >		self.btnSalvarNombreMolde=Button(self.frNombreMolde,
> >bg='#908875', fg='white',
> >				text="OK", font=('arial','16','bold'),
> >command=self.cmdBtnOKNombreMolde)
> >		self.btnSalvarNombreMolde.place(relx=0.3, rely=0.65,
> >relh=0.15, relw=0.25)
> >
> >		self.btnSalirNombreMolde=Button(self.frNombreMolde,
> >bg='#908875', fg='white',
> >				text="SALIR", font=('arial','16','bold'),
> >command=self.frNombreMolde2.destroy)
> >		self.btnSalirNombreMolde.place(relx=0.6, rely=0.65,
> >relh=0.15, relw=0.25)
> >
> >	def cmdBtnOKNombreMolde(self):
> >		self.NombreMolde=self.entryVarNombreMolde.get()
> >		if self.NombreMolde=='':
> >			pass
> >		elif len(self.NombreMolde)>15:
> >			pass
> >		else:
> >			print "molde cambiado"+self.NombreMolde
> >			self.frNombreMolde2.destroy()
> >
> >	def cmdBtnSalirMolde(self):
> >		self.frNombreMolde2.destroy()
> >
> >if __name__ == '__main__':
> >	root.geometry("200x100+400+300")
> >	root.overrideredirect(1)
> >
> >	btnNombre=Button(root,text="INSERTAR
> >NOMBRE",bg="blue",command=lambda parent=root: Molde(parent))
> >	btnNombre.pack(side=TOP, fill=BOTH, expand=YES)
> >
> >
> >btnSalir=Button(root,text="SALIR",bg="orange",command=root.destroy)
> >	btnSalir.pack(side=TOP, fill=BOTH, expand=YES)
> >
> >	root.mainloop()
> >
> >
> >On Tue, 29 Jun 2004, Ernesto Revilla wrote:
> >
> >
> >
> >>Con más código nos ayudarías:
> >>
> >>* estás ejecutando el mainloop() al final del programa? SI
> >>
> >>* estáis creando los Entries cada vez de nuevo? Los StringVars también?
> >>
> >>
> >SI, SE SOBREESCRIBEN CADA VEZ QUE ENTRO...
> >
> >
> >>* qué se utiliza para cerrar la ventana? DESTRUYO EL FRAME PRINCIPAL DE
> >>
> >>
> >LA MISMA (EL QUE CONTIENE TODOS LOS ENTRY), TAMBIEN HE INTENTADO DESTRUIR
> >OBJETO A OBJETO Y HACE LO MISMO...
> >
> >
> >>...
> >>Erny
> >>
> >>
> >
> >SI NECESITAIS MAS... DECIDLO QUE OS ENVIO MAS, PERO NO SE QUE PUEDE SER!
> >HE PROBADO TAMBIEN PONER LO DEL FOCUS PARA ACTIVARLO Y NADA...
> >
> >GRACIAS!!
> >
> >
> >
> >
> >>Christal Berengena Moreno escribió:
> >>
> >>
> >>
> >>>Hola a todos!
> >>>
> >>>Os explico un poco nuestro problema para ver si alguien sabe a que puede
> >>>ser debido...
> >>>Tenemos un programa en python que en ciertas ocasiones solicita
> >>>informacion del usuario mediante "entry" de tkinter... hasta aqui todo
> >>>bien... Lo especial en nuestro problema es que solo nos permite acceder a
> >>>la parte de entrada del entry, solo nos aparece en cursor para introducir
> >>>datos, la primera vez que abrimos el toplevel que contiene el entry...
> >>>Nos pasa en todos los entrys y no sabemos que es lo que puede causar
> >>>esto... parece como si el entry tubiera un "tope" en una especie de buffer
> >>>y se llenara, pero es que cada vez que cerramos el toplevel lo destruimos
> >>>todo y al abrirlo de nuevo se genera otra vez...
> >>>
> >>>El codigo que utilizamos para generarlo es este...
> >>>
> >>>self.entryVarNombreMolde=StringVar()
> >>>self.entryVarNombreMolde.set(self.InterfazGeneral.valoresMaqs[self.nummaq].TxtCaractMoldeAct[0])
> >>>self.EntryNombreMolde=Entry(self.frNombreMolde, width=30,
> >>>	bg='white', font=('arial','18','bold'),
> >>>	textvariable=self.entryVarNombreMolde)
> >>>self.EntryNombreMolde.place(relx=0.05, rely=0.4)
> >>>
> >>>Luego, al leerlo siempre usamos self.entryVarNombreMolde.get(), pero eso
> >>>no nos da problemas...
> >>>
> >>>Si alguien tiene idea de como se puede solucionar o hay alguna otra manera
> >>>de introducir datos... que no dude en decirnoslo!!
> >>>
> >>>Un saludo y gracias!!!!!
> >>>Y si necesitais que os explique mas para poder ayudarnos... no hay
> >>>problema... otra vez gracias!! :)
> >>>
> >>>
> >>>------------------------------------------------------------------------
> >>>
> >>>_______________________________________________
> >>>Python-es mailing list
> >>>Python-es en aditel.org
> >>>http://listas.aditel.org/listinfo/python-es
> >>>
> >>>
> >>>
> >>>
> >>_______________________________________________
> >>Python-es mailing list
> >>Python-es en aditel.org
> >>http://listas.aditel.org/listinfo/python-es
> >>
> >>
> >>
> >
> >_______________________________________________
> >Python-es mailing list
> >Python-es en aditel.org
> >http://listas.aditel.org/listinfo/python-es
> >
> >
> >
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




Más información sobre la lista de distribución Python-es