Caja de texto con menú de copiar, cortar y pegar en Tcl/Tk (tkinter)

Las cajas de texto (clases ttk.Entry y tk.Entry) proveen por defecto la funcionalidad de copiar, cortar y pegar contenido vía los atajos del teclado, no así el clásico menú contextual como se muestra en la siguiente imagen.

Menú contextual en caja de texto

No obstante, implementarlo manualmente es una tarea más o menos sencilla. Creamos una nueva clase a la que llamaremos EntryEx, que heredará toda la funcionalidad de ttk.Entry, pero además añadirá las opciones de copiar, cortar y pegar usando un menú contextual.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk
from tkinter import ttk


class EntryEx(ttk.Entry):
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.menu = tk.Menu(self, tearoff=False)
        self.menu.add_command(label="Copiar", command=self.popup_copy)
        self.menu.add_command(label="Cortar", command=self.popup_cut)
        self.menu.add_separator()
        self.menu.add_command(label="Pegar", command=self.popup_paste)
        self.bind("<Button-3>", self.display_popup)
    
    def display_popup(self, event):
        self.menu.post(event.x_root, event.y_root)
    
    def popup_copy(self):
        self.event_generate("<<Copy>>")

    def popup_cut(self):
        self.event_generate("<<Cut>>")

    def popup_paste(self):
        self.event_generate("<<Paste>>")


root = tk.Tk()
entry = EntryEx(root)
entry.pack()
root.mainloop()

De este modo, cada vez que precisemos una caja de texto con tal funcionalidad, crearemos una instancia de EntryEx.

Curso online 👨‍💻

¡Ya lanzamos el curso oficial de Recursos Python en Udemy! Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.

Consultoría 💡

Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.

3 comentarios.

  1. Hola gente, tengo una intriga y espero que puedan evacuar
    mi duda, ¿es muy complicado construir el mismo código sin
    utilizar clases?, soy nuevo en tkinter y lo necesito para mi
    editor de texto, desde ya muchas gracias.-

Deja una respuesta