首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Pyqt5中以编程方式更改输入键盘布局?

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

Stack Overflow用户
提问于 2022-03-06 12:05:08
回答 3查看 1.1K关注 0票数 4

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

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

例如。在我的第一个文本框中,我需要分配一个"Tamil99“键盘布局,在第二个文本框中,我需要指定一个”泰米尔语音“键盘布局。如何以编程方式分配它?

代码语言:javascript
复制
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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-08 17:12:42

所以Qt不提供这个,但是你可以要求你的操作系统为你做。

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

我找到了这个KLID列表 (键盘布局ID),它显示了两个泰米尔键盘。"00000449“是泰米尔语,"00020449”是泰米尔语99。后面的449表示泰米尔语,以及设置使用哪种类型的泰米尔键盘之前的两位数(例如,20表示泰米尔99) --我找不到泰米尔语音的一个,但也许你能找到它。

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

此外,如果要检查当前键盘布局,可以使用win32api.GetKeyboardLayout(0) (文档)。也许你可以用这个来找出你想要使用的泰米尔键盘的ID是什么。请注意,它返回的是地区id的int,而不是字符串。

其他与键盘相关的有用函数是win32api.GetKeyboardLayoutList() (查找当前计算机上安装的所有区域)、win32api.GetKeyboardLayoutName()win32api.GetKeyboardState - 所有这些的文档都可以在这里找到

票数 4
EN

Stack Overflow用户

发布于 2022-03-11 15:12:30

你的代码对我来说很好。也没有必要改变键盘布局的senthamil字体。确保计算机上安装了senthamil font连结下载仙他米尔

如果要以编程方式更改键盘布局,可以执行以下操作:

代码语言:javascript
复制
from win32api import LoadKeyboardLayout # pypi.org/project/pywin32/


class Diff_Language(QWidget):

    def box2Pressed(self, event):
        print("Pressed 2nd box")
        LoadKeyboardLayout("00000409", 1) # https://stackoverflow.com/a/15770148/16479143
    
    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.mousePressEvent = self.box2Pressed # function is called everytime this widget is pressed.
        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)

在第二个框中输入jkpo;将在泰米尔语中键入泰米尔语。

票数 3
EN

Stack Overflow用户

发布于 2022-03-15 11:49:46

windows操作系统已经回复了它,如果linux系统需要它,则必须使用setxbmap命令。或者这类python /实用程序https://pypi.org/project/keyboard-switch/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71370107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档