El uso de opciones (Options) permite configurar las propiedades de los componentes gráficos, afectendo su estado, dimensiones, color, posición, etc. Existen tres métodos para ajustar estas opciones, aplicables de manera consistente a diversos widgets:
- Parámetros Nombrados (Argumantos de Palabra Clave) durante la Creación:
boton_ejemplo = Button(self, fg="red", bg="blue")
- Acceso tipo Diccionario después de la Creación:
boton_ejemplo['fg'] = 'red'
boton_ejemplo['bg'] = 'blue'
- Uso del Método
config()después de la Creación:
boton_ejemplo.config(fg='red', bg='blue')
Para detalles adicionales, consulte la documentación oficial de Tkinter.
El Widget Button
El Button se utiliza para manejar las interacciones de clic del usuario. Puede mostrar texto o una imagen. Al ser presionado, ejecuta automáticamente la función asociada a su evento command.
"""
Ejemplo de uso del widget Button
"""
from tkinter import Tk, Frame, Button, PhotoImage, messagebox
class AplicacionBotones(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.crear_widgets()
def crear_widgets(self):
# Botón con texto
self.btn_login = Button(root, text='Ingresar', width=6, height=3, anchor='e', command=self.iniciar_sesion)
self.btn_login.pack()
# Botón con imagen (asegúrate de que la ruta sea correcta)
try:
global imagen_boton
# Reemplaza 'ruta/a/tu/imagen.gif' con la ruta real de tu archivo GIF.
imagen_boton = PhotoImage(file='ruta/a/tu/imagen.gif')
self.btn_imagen = Button(root, image=imagen_boton, command=self.iniciar_sesion)
self.btn_imagen.pack()
except Exception as e:
print(f"Error al cargar la imagen: {e}")
messagebox.showerror("Error de Imagen", "No se pudo cargar el archivo de imagen.")
def iniciar_sesion(self):
messagebox.showinfo('Sistema', '¡Inicio de sesión exitoso!')
if __name__ == '__main__':
root = Tk()
root.geometry('500x300+200+200')
root.title('Ejemplo de Botones')
app = AplicacionBotones(master=root)
app.mainloop()
El Widget Entry (Campo de Texto de una Sola Línea)
El Entry es ideal para la entrada de texto en una sola línea. Si el texto excede el ancho del widget, se desplazará automáticamente. Para entradas de múltiples líneas, se debe utilizar el widget Text.
"""
Ejemplo de uso del widget Entry
"""
from tkinter import Tk, Frame, Label, Entry, Button, StringVar, messagebox
class AplicacionEntry(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.crear_widgets()
def crear_widgets(self):
# Campo de usuario
self.lbl_usuario = Label(self, text='Usuario')
self.lbl_usuario.pack()
self.var_usuario = StringVar()
self.entry_usuario = Entry(self, textvariable=self.var_usuario)
self.entry_usuario.pack()
self.var_usuario.set('usuario_predeterminado') # Valor por defecto
# Campo de contraseña
self.lbl_contrasena = Label(self, text='Contraseña')
self.lbl_contrasena.pack()
self.var_contrasena = StringVar()
self.entry_contrasena = Entry(self, textvariable=self.var_contrasena, show='*') # Oculta la entrada
self.entry_contrasena.pack()
self.var_contrasena.set('contraseña_secreta') # Valor por defecto
# Botón de inicio de sesión
self.btn_submit = Button(self, text='Entrar', command=self.verificar_credenciales)
self.btn_submit.pack()
def verificar_credenciales(self):
usuario = self.var_usuario.get()
contrasena = self.var_contrasena.get()
print(f'Usuario: {usuario}')
print(f'Contraseña: {contrasena}')
if usuario == 'admin' and contrasena == '12345':
messagebox.showinfo('Acceso', '¡Credenciales correctas!')
else:
messagebox.showerror('Acceso', 'Credenciales inválidas.')
if __name__ == '__main__':
root = Tk()
root.geometry('500x300+200+200')
root.title('Ejemplo de Campos de Texto')
app = AplicacionEntry(master=root)
app.mainloop()
El Widget Text (Campo de Texto Multilínea)
El widget Text es versátil, permitiendo la visualización de texto multilínea, hipervínculos, imágenes, e incluso la intergación de otros widgets. Esto lo convierte en una base para editores de texto simples o navegadores web básicos.
"""
Ejemplo de uso del widget Text
"""
from tkinter import Tk, Frame, Button, Text, PhotoImage, messagebox, INSERT, END
import webbrowser
class AplicacionText(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.crear_widgets()
def crear_widgets(self):
# Widget Text
self.txt_editor = Text(root, width=40, height=12, bg='lightgray')
self.txt_editor.pack()
# Inserción inicial de texto
self.txt_editor.insert(1.0, 'Línea inicial de texto.\n')
self.txt_editor.insert('2.3', 'Texto insertado en línea 2, columna 3.\n')
self.txt_editor.insert(END, 'Texto al final del contenido.\n')
# Botones de control
btn_insertar = Button(self, text='Insertar', command=self.insertar_texto)
btn_insertar.pack(side='left')
btn_obtener = Button(self, text='Obtener', command=self.obtener_texto)
btn_obtener.pack(side='left')
btn_imagen = Button(self, text='Insertar Imagen', command=self.insertar_imagen)
btn_imagen.pack(side='left')
btn_widget = Button(self, text='Insertar Widget', command=self.insertar_widget)
btn_widget.pack(side='left')
btn_tags = Button(self, text='Ejemplo Tags', command=self.ejemplo_tags)
btn_tags.pack(side='left')
def insertar_texto(self):
self.txt_editor.insert(INSERT, 'Texto agregado en cursor. ')
self.txt_editor.insert(END, '[Fin]')
def obtener_texto(self):
contenido_completo = self.txt_editor.get(1.0, END)
print('--- Contenido del Editor ---')
print(contenido_completo)
print('--- Fin del Contenido ---')
# Ejemplo de obtención de un rango específico
rango_texto = self.txt_editor.get('1.15', '1.25') # Obtiene de char 15 a 25 en la línea 1
print(f'Texto en rango específico: {rango_texto}')
def insertar_imagen(self):
try:
# Reemplaza 'ruta/a/tu/imagen.gif' con la ruta real de tu archivo GIF.
self.img_tk = PhotoImage(file='ruta/a/tu/imagen.gif')
self.txt_editor.image_create(END, image=self.img_tk)
except Exception as e:
print(f"Error al cargar imagen para Text: {e}")
messagebox.showerror("Error de Imagen", "No se pudo cargar el archivo de imagen para el widget Text.")
def insertar_widget(self):
btn_interno = Button(self.txt_editor, text='Widget Interno')
# Crea el widget dentro del Text widget
self.txt_editor.window_create(INSERT, window=btn_interno)
def ejemplo_tags(self):
self.txt_editor.delete(1.0, END)
self.txt_editor.insert(INSERT, 'Texto de ejemplo con tags.\n')
self.txt_editor.insert(END, 'Visita Baidu.com\n')
# Configuración de un tag 'destacado'
self.txt_editor.tag_add('destacado', '1.0', '1.20')
self.txt_editor.tag_config('destacado', background='yellow', foreground='red', font=('Arial', 10, 'bold'))
# Configuración de un tag 'enlace_baidu' para un hipervínculo
self.txt_editor.tag_add('enlace_baidu', '2.0', '2.12') # Texto 'Visita Baidu.com'
self.txt_editor.tag_config('enlace_baidu', underline=True, foreground='blue')
self.txt_editor.tag_bind('enlace_baidu', '<Button-1>', self.abrir_baidu)
def abrir_baidu(self, event):
webbrowser.open('http://www.baidu.com')
if __name__ == '__main__':
root = Tk()
root.geometry('500x300+200+200')
root.title('Ejemplo de Widget Text')
app = AplicacionText(master=root)
app.mainloop()