如何在 Pyqt5 中以编程方式更改输入键盘布局?

tck*_*qnt 5 python pyqt5

是否可以在 Pyqt5 中以编程方式更改输入键盘布局?

我的第一个和第二个文本框接受泰米尔字母。泰米尔语 有很多可用的键盘布局。默认情况下,在 Windows 10 中,泰米尔语注音、泰米尔语 99 和泰米尔语传统键盘可用。现在我想以编程方式选择键盘布局...

例如。在我的第一个文本框中,我需要分配“Tamil99”键盘布局,在第二个文本框中,我需要分配“Tamil Phonetic”键盘布局。如何以编程方式分配它?

import sys

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class Diff_Language(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("InPut Different languges in Different Textbox")
        self.lbl1 = QLabel("Input Language - Tamil99 Keyboard")
        self.lbl2 = QLabel("Input Language - Tamil phonetic keyboard")


        self.tbox1 = QLineEdit()
        self.tbox1.setFont(QFont('senthamil', 10, QFont.Bold))

        self.tbox2 = QLineEdit()
        self.tbox2.setFont(QFont('senthamil', 30, QFont.Bold))

        self.vbox = QVBoxLayout()
        self.vbox.addWidget(self.lbl1)
        self.vbox.addWidget(self.tbox1)
        self.vbox.addWidget(self.lbl2)
        self.vbox.addWidget(self.tbox2)

        self.setLayout(self.vbox)

def main():
    app = QApplication(sys.argv)
    mainscreen = Diff_Language()
    app.setStyle("Fusion")
    mainscreen.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

JRV*_*ale 5

所以 Qt 不提供此功能,但您可以要求操作系统为您做这件事。

假设您只是查看 Windows,您可以使用pywin32更改 python 中的当前键盘布局,这使您可以从脚本轻松访问 Windows API。一旦安装到 Python 环境中,您 import win32api就可以使用类似的调用win32api.LoadKeyboardLayout('00000809',1)来设置布局(我在此处放置的值将其设置为英国英语)。第一个参数是表示要使用的键盘布局的字符串,第二个参数是标志。请参阅文档

我找到了这个 KLID(键盘布局 ID)列表,其中显示了两个泰米尔语键盘。“00000449”是泰米尔语,“00020449”是泰米尔语 99。末尾的 449 表示泰米尔语,前面的两位数字设置要使用的泰米尔语键盘的子类型(例如,20 表示泰米尔语 99) - 我找不到泰米尔语键盘语音,但也许你能找到它。

您可以将程序设置为在您希望切换键盘时调用这些函数(例如,当您的用户激活特定的文本输入框时)。

另外,如果您想检查当前的键盘布局,可以使用win32api.GetKeyboardLayout(0)doc)。也许您可以使用它来找出您想要使用的每个泰米尔语键盘的 ID。请注意,它返回一个 int 作为区域设置 id,而不是一个字符串。

其他有用的键盘相关功能是win32api.GetKeyboardLayoutList()(查找当前计算机上安装的所有语言环境),win32api.GetKeyboardLayoutName()并且win32api.GetKeyboardState-所有这些功能的文档都可以在此处找到

  • (我不会读或说泰米尔语,所以如果我把键盘弄混了,我很抱歉!) (2认同)
  • @tckraomuqnt 我不知道现在键盘布局是如何工作的,但是如果您的备用布局不是默认布局,则在焦点更改时切换应用程序时系统可能会自动重置为默认布局。尝试在输入小部件的“focusInEvent()”覆盖中实现上述内容,*在*调用基本实现之后。 (2认同)