[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