[pyar] Consulta Tkinter

Roberto Gomez rgomez en autotrol.com.ar
Vie Mayo 9 13:59:34 ART 2014


patricio tula wrote:
> Claro, es eso lo que busco.
> Lo implementé pero no está funcionando. Por lo que leí acá [1
> <http://infohost.nmt.edu/tcc/help/pubs/tkinter/tkinter.pdf>] es un
> método de widget y lo implementé tal cual pero no bloquea las ventanas
> en niveles inferiores.
> Mando el código. Cualquier otra corrección o consejo será bienvenido :-).
> Saludos,
>
>
> 2014-05-09 12:10 GMT-03:00 Roberto Gomez
> <rgomez en autotrol.com.ar
> <mailto:rgomez en autotrol.com.ar>>:
>
>     patricio tula wrote:
>
>         Gracias por el aporte rober :). Acabo de cambiar eso.
>
>         Otra tema que todavìa no pude solucionar y quisiera consultar es
>         como
>         bloquear una ventana. En particular, en el fragmento que mandé
>         antes no
>         aparece la necesidad. Sin embargo, cuando arranca el programa la
>         primer
>         ventana que aparece no cierra y sigue funcionando. Existe algún
>         método
>         para bloquearla mientras el usuario interactúa con otras
>         ventanas Toplevels?
>
>
>         Saludos,
>         Pato
>
>
>     No entiendo bien la pregunta, así que voy a suponer.
>     Si queres que una ventana conserve el foco y que hasta que no la
>     cierres no puedas interactuar con ninguna otra ventana de tu
>     aplicación, investigá el método wait_window(window) de los
>     Toplevels. Este método hace que un toplevel espere a que cierres
>     'window' para devolver el control. Si 'window' es el mismo toplevel,
>     entonces se queda esperando a que se cierre él mismo.
>
>     Si esto no tiene nada que ver con lo que preguntás, hacéte un
>     ejemplito autocontenido, decí qué es lo que hace y qué es lo te
>     gustaría que hiciera.
>
>     Saludos,
>
>     rober

Le agregué sólamente una linea que ejecuta grab_set() en el Toplevel 
para pasarle primero el control a esa ventana y luego que se ejecute el 
wait_window para que no la suelte.

def PrestamosHerramientas():
	Prestamos = Toplevel()
	nombreApellido=StringVar(Prestamos)
	dni=StringVar(Prestamos)
	Prestamos.title("LABI-Sistema de control de prestamos-Prestamos")
	#Nombre y apellido
	L1=Label(Prestamos,text="Nombre y Apellido").grid(row=0,column=0)
	E1=Entry(Prestamos,textvariable=nombreApellido, bd=5).grid(row=0,column=1)
	#DNI
	L2=Label(Prestamos, text="DNI").grid(row=1,column=0)
	E2=Entry(Prestamos, textvariable=dni,bd=5).grid(row=1, column=1)
	#herramientas prestadas
	L3=Label(Prestamos,text="Herramientas:").grid(row=2,column=0)
	#TODO Faltan metodos de lectura de codigo de barras e imprimir la 
herramienta leida como label
	def Prestar():
		Prestamos.destroy()
		Prestar = Toplevel()
		Prestar.geometry("200x100")
		Prestar.title("Prestar")
		PrestarNyALabel = Label(Prestar, text=nombreApellido.get()).pack()
		PrestarDNILabel = Label(Prestar, text=dni.get()).pack()
		PrestarHerramientasLabel = Label(Prestar, text="Herramientas").pack()
	PrestarBoton = Button(Prestamos, 
text="PRESTAR",command=Prestar).grid(row=3,column=1)
	*Prestamos.grab_set()*
	Prestamos.wait_window(Prestamos)

Igualmente, crítica constructiva y según mi experiencia y gusto, la 
aplicación así como la estás planteando (usando funciones) está bastante 
chancha (no offence). Tarde o temprano, más temprano que tarde, se va a 
encarajinar tanto que la va a mantener Cadorna, y cada nueva 
funcionalidad que quieras agregar/modificar va a ser un parto.

Lo que se suele hacer es implementar cada "formulario/dialog" como una 
clase que, por lo menos, herede de un Toplevel o de un Frame e 
implementar tus funcionalidades ahí. Es más, ideal es tener una clase 
base, que hereda de Toplevel o Frame, y cada uno de tus formularios 
hereda de esa clase base. Entonces todos tus formularios pueden tener el 
mismo look&feel xej botones de aceptar, cancelar, hot-keys para el help, 
etc.

Te recomiendo el libro de Grayson que ya se debe conseguir fácilmente 
por ahí, que si bien es un poco viejito, no sólamente ahonda en Tkinter, 
sino en diseño y buenas prácticas para la construcción de gui(s).

Mis 0.00001 centavos,
saludos
rober








More information about the pyar mailing list