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.
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.
Daniel says:
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.-
Recursos Python says:
Hola, Daniel.
Sí, lo podemos ver en el foro.
Saludos
ElXocas says:
muy buena informacion y bastante educativa, muchas gracias 😀