Форум сайта python.su
Проблема в том, что copy paste в Tk работает только под английской раскладкой.
Код ниже позволяет получать нажатие аналогичных кнопок на русской раскладке.
Теперь нужно как-то передать команду на копирование/вставку.
Работаю с текстом в TextWidget, выделенным курсором.
import tkinter as tk def copy(event): print('copy') def paste(event): print('paste') def test(event): print('event.char:', event.char) print('event.keycode:', event.keycode) print('event.keysym:', event.keysym) print('---') root = tk.Tk() root.bind('<Key>', test) root.bind('<ntilde>', copy) root.bind('<igrave>', paste) root.bind('<Control-Cyrillic_em>', paste) root.mainloop( )
Отредактировано Guljaca (Ноя. 7, 2017 19:59:38)
Офлайн
ну както так:
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()
[code python][/code]
Отредактировано PEHDOM (Ноя. 8, 2017 14:31:48)
Офлайн