WhatsApp

  

7 Editores de texto sencillos con Tkinter: Text y Scrollbar

Aprende a crear editores de texto básicos en Python usando Tkinter. Conoce el widget Text, sus diferencias con Entry, operaciones CRUD, integración de Scrollbar y un ejemplo completo de mini bloc de notas con botón de limpieza.

Editores de texto sencillos con Tkinter: Text y Scrollbar

Tkinter es la biblioteca estándar de Python para crear interfaces gráficas (GUI). Aunque su apariencia es básica, ofrece todos los widgets necesarios para construir aplicaciones útiles rápidamente. En este artículo veremos cómo crear un editor de texto simple usando los widgets Text y Scrollbar, y compararemos Text con el más conocido Entry.

Widget Entry

  • Diseñado para una sola línea de texto.
  • Ideal para campos como username, password, search bar.
  • Propiedad show='*' permite ocultar caracteres (útil para contraseñas).
  • Limitado en operaciones de formato; solo texto plano.

Widget Text

  • Soporta texto multilínea con salto de línea automático.
  • Permite etiquetas, fuentes y colores por rango de caracteres.
  • Incluye funcionalidades avanzadas: undo, redo, clipboard, tag_config.
  • Requiere un Scrollbar externo para navegación cuando el contenido supera el área visible.

Insertar, leer y borrar texto en Text

El widget Text usa índices tipo line.column (por ejemplo, 1.0 = primera línea, columna 0). Los métodos más usados son:

# Insertar texto al final
text_widget.insert(tk.END, "Hola mundo\n")
# Insertar en una posición específica
text_widget.insert('2.5', 'texto en la línea 2, columna 5')
# Obtener todo el contenido
contenido = text_widget.get('1.0', tk.END)  # Incluye salto final
# Obtener solo una parte
parcial = text_widget.get('3.0', '3.end')   # Línea 3 completa
# Borrar rango
text_widget.delete('1.0', tk.END)          # Vacía el widget

Consejo de rendimiento: Si vas a insertar o eliminar grandes bloques de texto, desactiva temporalmente la actualización visual con text_widget.configure(state='disabled') y vuelve a activarla al terminar.

Cómo conectar un Scrollbar al widget Text

El Scrollbar debe estar configurado para controlar el yscrollcommand del Text y a la inversa, el Text debe notificar al Scrollbar mediante su método set:

scroll = tk.Scrollbar(root, orient='vertical')
text  = tk.Text(root, yscrollcommand=scroll.set)
scroll.config(command=text.yview)

Con orient='horizontal' puedes crear una barra horizontal y enlazarla con text.xview.

Ejemplo práctico: mini bloc de notas con botón "Limpiar"

El siguiente script muestra una ventana con:

  • Un Text de dimensiones ajustables.
  • Una Scrollbar vertical conectada.
  • Un botón Limpiar que borra todo el contenido.
  • Opciones de deshacer/rehacer activadas.
import tkinter as tk
from tkinter import messagebox
class MiniNotepad(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Mini Bloc de Notas – Tkinter")
        self.geometry("600x400")
        self.configure(bg='#f8f9fa')
        self._create_widgets()
    def _create_widgets(self):
        # Frame contenedor para Text + Scrollbar
        frame = tk.Frame(self, bg='#f8f9fa')
        frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
        # Scrollbar vertical
        v_scroll = tk.Scrollbar(frame, orient='vertical')
        v_scroll.pack(side=tk.RIGHT, fill=tk.Y)
        # Widget Text con undo habilitado
        self.text = tk.Text(
            frame,
            wrap='word',
            undo=True,
            yscrollcommand=v_scroll.set,
            font=('Consolas', 11),
            bg='white',
            relief=tk.SUNKEN,
            borderwidth=2
        )
        self.text.pack(fill=tk.BOTH, expand=True)
        v_scroll.config(command=self.text.yview)
        # Botón limpiar
        btn_clear = tk.Button(
            self,
            text='Limpiar',
            command=self._clear_text,
            bg='#dc3545',
            fg='white',
            activebackground='#c82333',
            relief=tk.RAISED,
            padx=10,
            pady=5
        )
        btn_clear.pack(pady=(0,10))
        # Bind teclas rápidas
        self.bind_all('', self._save_placeholder)
        self.bind_all('', lambda e: self.text.edit_undo())
        self.bind_all('', lambda e: self.text.edit_redo())
    def _clear_text(self):
        if messagebox.askyesno('Confirmar', '¿Deseas borrar todo el contenido?'):
            self.text.delete('1.0', tk.END)
    def _save_placeholder(self, event=None):
        # Aquí podrías implementar guardado a archivo
        messagebox.showinfo('Guardar', 'Funcionalidad de guardado no implementada.')
if __name__ == '__main__':
    app = MiniNotepad()
    app.mainloop()

Ejecuta el script y tendrás un editor funcional. Puedes ampliar la aplicación añadiendo:

  • Menú Archivo → Abrir / Guardar con filedialog.
  • Resaltado de sintaxis usando tag_config.
  • Soporte para temas oscuros mediante variables de estilo.

Buenas prácticas, rendimiento y solución de problemas

Rendimiento

  • Evita cargar textos gigantes (más de 1 MB) directamente en Text; usa paginación o carga diferida.
  • Utiliza .see(index) para desplazar el cursor sin forzar redibujos completos.

Seguridad

  • Si tu aplicación permite pegar contenido externo, limpia caracteres de control con re.sub(r'\x00-\x1F', '', texto) antes de insertarlo.
  • Desactiva la edición (state='disabled') cuando muestres contenido que el usuario no debe modificar.

Depuración frecuente

ProblemaPosible causaSolución
Scrollbar no se mueveOlvidaste enlazar command=text.yviewAsegúrate de llamar scroll.config(command=text.yview)
Texto desaparece al hacer insertEstás usando END-1c en vez de ENDUtiliza siempre tk.END o calcula el índice correcto
El widget se vuelve lento al escribirMuchos tag_config dinámicosConsolida tags y actualiza en bloque usando text.after_idle()

Compatibilidad, rendimiento y escalabilidad

El widget Text está disponible en todas las plataformas soportadas por Tkinter (Windows, macOS, Linux). No depende de versiones específicas de Python; funciona desde 3.6 en adelante.

Para aplicaciones que requieran alta escalabilidad (p.ej., editores de código con miles de líneas), considera alternativas como QScintilla o GtkSourceView. Sin embargo, para notas rápidas, scripts internos o herramientas de depuración, Text sigue siendo la opción más ligera y sin dependencias externas.

Con Text y Scrollbar puedes crear editores de texto funcionales en minutos, manteniendo una base de código limpia y portable. Experimenta añadiendo menús, resaltado de sintaxis y guardado automático para convertir este mini bloc de notas en una herramienta de productividad personal.

 

7 Editores de texto sencillos con Tkinter: Text y Scrollbar
ASIMOV Ingeniería S. de R.L. de C.V., Emiliano Nava 10 diciembre, 2025
Compartir
Iniciar sesión dejar un comentario

  
6 Eventos en Tkinter: del clic del mouse a tus funciones Python
Aprende a manejar eventos en Tkinter, diferencia entre `command=` y `bind()`, y descubre ejemplos prácticos de mouse y teclado con acceso a la información del evento.