ну както так:
import tkinter as tk
def copy(event):
widget = event.widget
try:
start = widget.index("sel.first")
end = widget.index("sel.last")
except tk.TclError:
pass
else:
widget.clipboard_clear()
widget.clipboard_append(widget.get(start, end))
def paste(event):
widget = event.widget
try:
start = widget.index("sel.first")
end = widget.index("sel.last")
widget.delete(start, end)
except tk.TclError:
pass
clipboard = widget.clipboard_get()
widget.insert("insert", clipboard)
root = tk.Tk()
text = tk.Text(root)
text.pack(side="bottom", fill="both", expand=True)
root.bind('<ntilde>', copy)
root.bind('<igrave>', paste)
root.bind('<Control-Cyrillic_em>', paste)
root.mainloop()
хотя такая реализация конечно выглядит некрасиво, лучше создать класс наследник виджета и там как методы класса описать копи\паст
import tkinter as tk
class TextWidget(tk.Text):
def __init__(self, *args, **kwargs):
tk.Text.__init__(self, *args, **kwargs)
def copy(self, event):
try:
start = self.index("sel.first")
end = self.index("sel.last")
except tk.TclError:
pass
else:
self.clipboard_clear()
self.clipboard_append(self.get(start, end))
def paste(self, event):
try:
start = self.index("sel.first")
end = self.index("sel.last")
self.delete(start, end)
except tk.TclError:
pass
clipboard = self.clipboard_get()
self.insert("insert", clipboard)
root = tk.Tk()
text = TextWidget(root)
text.pack(side="bottom", fill="both", expand=True)
root.bind('<ntilde>', text.copy)
root.bind('<igrave>', text.paste)
root.bind('<Control-Cyrillic_em>', text.paste)
root.mainloop()