Hemos visto hasta ahora los controles Button y Label, ahora veremos otro control visual indispensable para hacer la entrada de datos por teclado.
En tkinter el control de entrada de datos por teclado se llama Entry. Con este control aparece el típico recuadro que cuando se le da foco aparece el cursor en forma intermitente esperando que el operador escriba algo por teclado.
Confeccionar una aplicación que permita ingresar un entero por teclado y al presionar un botón muestre dicho valor elevado al cuadrado en una Label.
import tkinter as tk class Aplicacion: def __init__(self): self.ventana1=tk.Tk() self.label1=tk.Label(self.ventana1,text="Ingrese un número:") self.label1.grid(column=0, row=0) self.dato=tk.StringVar() self.entry1=tk.Entry(self.ventana1, width=10, textvariable=self.dato) self.entry1.grid(column=0, row=1) self.boton1=tk.Button(self.ventana1, text="Calcular Cuadrado", command=self.calcularcuadrado) self.boton1.grid(column=0, row=2) self.label2=tk.Label(self.ventana1,text="resultado") self.label2.grid(column=0, row=3) self.ventana1.mainloop() def calcularcuadrado(self): valor=int(self.dato.get()) cuadrado=valor*valor self.label2.configure(text=cuadrado) aplicacion1=Aplicacion()
La ejecución de esta aplicación muestra una interfaz visual similar a esta:
Veamos lo nuevo que aparece para definir un objeto de la clase Entry:
self.dato=tk.StringVar() self.entry1=tk.Entry(self.ventana1, widt=10, textvariable=self.dato) self.entry1.grid(column=0, row=1)
Cuando trabajamos con la clase Entry debemos también crear un objeto de la clase StringVar y pasar dicho objeto al parámetro textvariable cuando se crea el objeto de la clase Entry.
La clase StringVar al igual que la clase Entry están declaradas en el módulo tkinter.
Cuando debemos rescatar el dato ingresado por el operador en el control de la clase Entry en realidad lo hacemos del objeto de la clase StringVar mediante el método get:
def calcularcuadrado(self): valor=int(self.dato.get()) cuadrado=valor*valor self.label2.configure(text=cuadrado)
Confeccionar un programa que permita ingresar el nombre de usuario en un control Entry y cuando se presione un botón mostrar el valor ingresado en la barra de títulos de la ventana.
import tkinter as tk class Aplicacion: def __init__(self): self.ventana1=tk.Tk() self.label1=tk.Label(self.ventana1,text="Ingrese nombre de usuario:") self.label1.grid(column=0, row=0) self.dato=tk.StringVar() self.entry1=tk.Entry(self.ventana1, width=20, textvariable=self.dato) self.entry1.grid(column=1, row=0) self.boton1=tk.Button(self.ventana1, text="Ingresar", command=self.ingresar) self.boton1.grid(column=1, row=1) self.ventana1.mainloop() def ingresar(self): self.ventana1.title(self.dato.get()) aplicacion1=Aplicacion()
La ejecución de esta aplicación muestra una interfaz visual similar a esta:
Para que el botón aparezca debajo del control Entry debemos fijar el parámetro 'column' con el valor 1:
self.boton1.grid(column=1, row=1)
Debemos pensar nuestra pantalla como una cuadrícula donde definimos la fila y columna para cada control:
self.label1.grid(column=0, row=0) self.entry1.grid(column=1, row=0) self.boton1.grid(column=1, row=1)
Debajo de la Label no aparece nada, eso debido a que no hemos dispuesto un control en dicha posición.
Cuando se presiona el botón extraemos del objeto de la clase StringVar el dato ingresado por el operador en el control Entry:
def ingresar(self): self.ventana1.title(self.dato.get())
self.entry2=tk.Entry(self.ventana1, width=30, textvariable=self.dato2, show="*")
ejercicio222.py import tkinter as tk class Aplicacion: def __init__(self): self.ventana1=tk.Tk() self.label1=tk.Label(self.ventana1,text="Ingrese primer valor:") self.label1.grid(column=0, row=0) self.dato1=tk.StringVar() self.entry1=tk.Entry(self.ventana1, width=20, textvariable=self.dato1) self.entry1.grid(column=1, row=0) self.label2=tk.Label(text="Ingrese segundo valor:") self.label2.grid(column=0, row=1) self.dato2=tk.StringVar() self.entry2=tk.Entry(self.ventana1, width=20, textvariable=self.dato2) self.entry2.grid(column=1, row=1) self.boton1=tk.Button(self.ventana1, text="Sumar", command=self.sumar) self.boton1.grid(column=1, row=2) self.label3=tk.Label(self.ventana1,text="resultado") self.label3.grid(column=1, row=3) self.ventana1.mainloop() def sumar(self): suma=int(self.dato1.get()) + int(self.dato2.get()) self.label3.configure(text=suma) aplicacion1=Aplicacion() ejercicio223.py import tkinter as tk class Aplicacion: def __init__(self): self.ventana1=tk.Tk() self.label1=tk.Label(self.ventana1,text="Ingrese nombre de usuario:") self.label1.grid(column=0, row=0) self.dato1=tk.StringVar() self.entry1=tk.Entry(self.ventana1, width=30, textvariable=self.dato1) self.entry1.grid(column=1, row=0) self.label2=tk.Label(text="Ingrese clave:") self.label2.grid(column=0, row=1) self.dato2=tk.StringVar() self.entry2=tk.Entry(self.ventana1, width=30, textvariable=self.dato2, show="*") self.entry2.grid(column=1, row=1) self.boton1=tk.Button(self.ventana1, text="Ingresar", command=self.ingresar) self.boton1.grid(column=1, row=2) self.ventana1.mainloop() def ingresar(self): if self.dato1.get()=="juan" and self.dato2.get()=="abc123": self.ventana1.title("Correcto") else: self.ventana1.title("Incorrecto") aplicacion1=Aplicacion()