0% encontró este documento útil (0 votos)
35 vistas10 páginas

Introducción a Tkinter en Python

Este documento explica el uso de los controles Entry y Radiobutton en Tkinter. Entry permite la entrada de datos por teclado y se usa junto con StringVar. Radiobutton permite seleccionar una opción de un grupo y almacena el valor seleccionado en un objeto IntVar.

Cargado por

javijmr2002
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
35 vistas10 páginas

Introducción a Tkinter en Python

Este documento explica el uso de los controles Entry y Radiobutton en Tkinter. Entry permite la entrada de datos por teclado y se usa junto con StringVar. Radiobutton permite seleccionar una opción de un grupo y almacena el valor seleccionado en un objeto IntVar.

Cargado por

javijmr2002
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

PYTHON

tkinter 2

Plan de trabajo
Estructuras condicionales

Control Entry
Control Radiobutton
Control Entry
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.

Problema:

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.

Programa:

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)

Problema:

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.
Programa:

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())

Problemas propuestos
1. Confeccionar un programa que permita ingresar dos números en controles de tipo
Entry, luego sumar los dos valores ingresados y mostrar la suma en una Label al
presionar un botón.

2. Ingresar el nombre de usuario y clave en controles de tipo Entry. Si se ingresa las


cadena (usuario: juan, clave="abc123") luego mostrar en el título de la ventana el
mensaje "Correcto" en caso contrario mostrar el mensaje "Incorrecto".
Para mostrar '*' cuando se ingresa la clave debemos pasar en el parámetro 'show' el
caracter a mostrar:
self.entry2=tk.Entry(self.ventana1, width=30, textvariable=self.dato2,
show="*")
Control Radiobutton
Otro control visual muy común es el Radiobutton que normalmente se muestran un conjunto
de Radiobutton y permiten la selección de solo uno de ellos. Se los debe agrupar para que
actúen en conjunto, es decir cuando se selecciona uno automáticamente se deben
deseleccionar los otros.

Problema:

Mostrar dos controles de tipo Radiobutton con las etiquetas "Varón" y "Mujer", cuando se
presione un botón actualizar una Label con el Radiobutton seleccionado.

Programa:

import tkinter as tk

class Aplicacion:
def __init__(self):
self.ventana1=tk.Tk()
self.seleccion=tk.IntVar()
self.seleccion.set(2)
self.radio1=tk.Radiobutton(self.ventana1,text="Varon",
variable=self.seleccion, value=1)
self.radio1.grid(column=0, row=0)
self.radio2=tk.Radiobutton(self.ventana1,text="Mujer",
variable=self.seleccion, value=2)
self.radio2.grid(column=0, row=1)
self.boton1=tk.Button(self.ventana1, text="Mostrar
seleccionado", command=self.mostrarseleccionado)
self.boton1.grid(column=0, row=2)
self.label1=tk.Label(self.ventana1,text="opcion
seleccionada")
self.label1.grid(column=0, row=3)
self.ventana1.mainloop()

def mostrarseleccionado(self):
if self.seleccion.get()==1:
self.label1.configure(text="opcion
seleccionada=Varon")
if self.seleccion.get()==2:
self.label1.configure(text="opcion
seleccionada=Mujer")

aplicacion1=Aplicacion()

La ejecución de esta aplicación muestra una interfaz visual similar a esta:


Definimos dos objetos de la clase Radiobutton e iniciamos el parámetro variable con la
referencia de un objeto de la clase IntVar:

self.radio1=tk.Radiobutton(self.ventana1,text="Varon", variable=self.seleccion,
value=1)
self.radio1.grid(column=0, row=0)
self.radio2=tk.Radiobutton(self.ventana1,text="Mujer", variable=self.seleccion,
value=2)
self.radio2.grid(column=0, row=1)

Previamente hemos definido el objeto de la clase IntVar que se encuentra en el módulo tk:

self.seleccion=tk.IntVar()
self.seleccion.set(2)

Aparece seleccionado por defecto el Radiobutton con la etiqueta "Mujer" ya que mediante el
método set fijamos el valor 2.

Cuando se presiona el botón analizamos el valor almacenado en el objeto IntVar:

def mostrarseleccionado(self):
if self.seleccion.get()==1:
self.label1.configure(text="opcion
seleccionada=Varon")
if self.seleccion.get()==2:
self.label1.configure(text="opcion
seleccionada=Mujer")
Problema:

Disponer dos controles de tipo Entry para el ingreso de enteros. Mediante dos controles
Radiobutton permitir seleccionar si queremos sumarlos o restarlos. Al presionar un botón
mostrar el resultado de la operación seleccionada.

Programa:

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(self.ventana1,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.seleccion=tk.IntVar()
self.radio1=tk.Radiobutton(self.ventana1,text="Sumar",
variable=self.seleccion, value=1)
self.radio1.grid(column=1, row=2)
self.radio2=tk.Radiobutton(self.ventana1,text="Restar",
variable=self.seleccion, value=2)
self.radio2.grid(column=1, row=3)
self.boton1=tk.Button(self.ventana1, text="Operar",
command=self.operar)
self.boton1.grid(column=1, row=4)
self.label3=tk.Label(self.ventana1,text="resultado")
self.label3.grid(column=1, row=5)
self.ventana1.mainloop()

def operar(self):
if self.seleccion.get()==1:
suma=int(self.dato1.get())+int(self.dato2.get())
self.label3.configure(text=suma)
if self.seleccion.get()==2:
resta=int(self.dato1.get())-int(self.dato2.get())
self.label3.configure(text=resta)
aplicacion1=Aplicacion()

La ejecución de esta aplicación muestra una interfaz visual similar a esta:

Cuando se presiona el botón se dispara el método 'operar':

self.boton1=tk.Button(self.ventana1, text="Operar",
command=self.operar)

En el método operar rescatamos de los objeto StringVar los valores ingresados en los
controles Entry:

def operar(self):
if self.seleccion.get()==1:
suma=int(self.dato1.get())+int(self.dato2.get())
self.label3.configure(text=suma)
if self.seleccion.get()==2:
resta=int(self.dato1.get())-int(self.dato2.get())
self.label3.configure(text=resta)

Problema propuesto
1. Disponer tres controles de tipo Radiobutton con las etiquetas 'Rojo', 'Verde' y 'Azul'.
Cuando se presione un botón cambiar el color de fondo del formulario.
Si consideramos que la variable ventana1 es un objeto de la clase Tk, luego si
queremos que el fondo sea de color rojo debemos llamar al método configure y en el
parámetro bg indicar un string con el color a activar ("red", "green" o "blue"):

self.ventana1.configure(bg="red")

También podría gustarte