【问题标题】:How to specify input language for Entry or any other input field?如何为 Entry 或任何其他输入字段指定输入语言?
【发布时间】:2019-07-18 19:11:48
【问题描述】:

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

例如,当我尝试写'ā'时,结果是'a'。

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

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

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

编辑 1:

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

【问题讨论】:

  • 对我来说这是系统的问题,tkinter 与此无关。也许系统功能中可以将不同的键盘分配给不同的程序。至少linux has this function
  • 如果您可以使用快捷方式更改语言,那么您可以使用pynput 将此组合发送到系统。

标签: python tkinter keyboard tkinter-entry


【解决方案1】:

我可以使用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 表单中的每个输入字段,但它可以完成工作。如果您有更好的解决方案,请在此处发布。

【讨论】:

猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 2019-07-20
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多