0

я обнаружил, что всякий раз, когда я переключить язык с английского на русский Tkinter перестанет реагировать на Ctrl + C, Ctrl + V или Ctrl + X.Python Tkinter (копировать/вставить не работает с другими языками)

Он по-прежнему работает, когда я переключаюсь на английский, даже если текст на русском языке.

Я пробовал все фрагменты кода, которые я мог найти в обмене стека удаленно, связанный с темой copy-paste, добавив материал, похожий на оригинальный код, например self.bind('<Control-м>', self.paste) («м» - это ту же кнопку на русском языке, что и «v» на английском языке), но до сих пор ничего не работает.

Был бы очень признателен за любую помощь/идеи по ее устранению.

+0

привет просто. связанные с быстрыми клавишами внутри приложений python, я использовал библиотеку с именем: pyHook. (Https://pypi.python.org/pypi/pyHook). пожалуйста, попробуйте. – george

ответ

0

Вы можете использовать <Key>, чтобы проверить, что keycode используется при нажатии Control-м, а затем использовать его, чтобы найти keysym на странице, как Tcl/Tk - keysym. Возможно, вам придется использовать <Control-Cyrillic_em>

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

root.mainloop() 
0

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() 
Смежные вопросы