Python tkinter (copy/paste not working with other languages) Python tkinter (copy/paste not working with other languages) tkinter tkinter

Python tkinter (copy/paste not working with other languages)


from Tkinter import Tk, Entry   def _onKeyRelease(event):    ctrl  = (event.state & 0x4) != 0    if event.keycode==88 and  ctrl and event.keysym.lower() != "x":         event.widget.event_generate("<<Cut>>")    if event.keycode==86 and  ctrl and event.keysym.lower() != "v":         event.widget.event_generate("<<Paste>>")    if event.keycode==67 and  ctrl and event.keysym.lower() != "c":        event.widget.event_generate("<<Copy>>")master = Tk()master.geometry("500x500+1+1")master.bind_all("<Key>", _onKeyRelease, "+")Entry(master).pack()Entry(master).pack()Entry(master).pack()master.mainloop()


I did this.

1.First received the current layout language on the advice of here:

def is_ru_lang_keyboard(self):    u = ctypes.windll.LoadLibrary("user32.dll")    pf = getattr(u, "GetKeyboardLayout")    return hex(pf(0)) == '0x4190419'

2. Then I defined the keys() method taking into account the layout, because without a condition in the case of the English layout, the method gave a duplicate string when inserting:

    def keys(event):        if self.is_ru_lang_keyboard():            if event.keycode==86:                event.widget.event_generate("<<Paste>>")            if event.keycode==67:                 event.widget.event_generate("<<Copy>>")                if event.keycode==88:                 event.widget.event_generate("<<Cut>>")                if event.keycode==65535:                 event.widget.event_generate("<<Clear>>")            if event.keycode==65:                 event.widget.event_generate("<<SelectAll>>")

3.Bound the keys() method of the Entry field to the "Control-KeyPress" event:

self.my_entry.bind("<Control-KeyPress>", keys)


You can use <Key> to check what keycode is used when you press Control-ΠΌ and then use it to find keysym on page like Tcl/Tk - keysym. Maybe you will have to use <Control-Cyrillic_em>

import tkinter as tkdef 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('<Control-c>', copy)root.bind('<Control-v>', paste)root.bind('<Control-Cyrillic_em>', paste)root.mainloop()