如何为“输入”或任何其他输入字段指定输入语言?

时间:2019-07-18 09:45:14

标签: python tkinter keyboard tkinter-entry

简而言之,我尝试输入Windows语言键盘允许的字母(在“ Entry”,“ Text”等输入组件中)(我使用的是“ Latvan(QWERTY)”键盘),但我无法写长字母,例如“ā”,“č”,“ģ”和其他字母。

例如,当我尝试写“ā”时,结果是“â”。

有趣的部分-当我专注于特定的GUI输入时,更改Windows键盘语言(使用“ Alt + Shift”快捷键或手动)两次(例如,从“ Latvan(QWERTY)”更改为“ Russian”)到“ Latvan(QWERTY)”)-然后我就可以写下所有需要的字母了。

我想要的是设置所有输入字段的键盘语言,这样我每次启动GUI程序时都可以写我想要的所有字母而无需执行上述操作。

如果您需要更多信息,或者已经有回答该问题的地方,请发表评论,我会采取相应行动。

编辑1:

我正在使用PyCharm编写我的Python Tkinter代码。我试图根据this guide将必要的键盘分配给程序生成的GUI表单,但是它没有用(我猜是因为我在临时创建的GUI表单上使用了它)。

1 个答案:

答案 0 :(得分:0)

我可以使用pynput解决我的问题。

这是我最终代码的简化版:

from tkinter import *
from pynput.keyboard import Key, Controller

def change_keyboard_lang(event):
    keyboard = Controller()
    for i in range(2):
        keyboard.press(Key.alt)
        keyboard.press(Key.shift_l)
        keyboard.release(Key.shift_l)
        keyboard.release(Key.alt)

root = Tk()

word_input = Entry(root)
word_input.focus_set()
word_input.bind("<FocusIn>", change_keyboard_lang)
word_input.pack()

root.mainloop()

简而言之,如果光标聚焦在输入字段“ word_input”上,则系统调用函数“ change_keyboard_lang”,将输入语言从原始语言更改为其他语言,然后又恢复为原始语言-现在我可以写必要的字母了。

这不是最佳解决方案,因为我需要将事件绑定到GUI表单中的每个输入字段,但可以完成工作。如果您有更好的解决方案,请在此处发布。