如何在 Pyqt5 中以编程方式更改输入键盘布局?
How to change Input Keyboard Layout programmatically In Pyqt5?
是否可以在 Pyqt5 中以编程方式更改输入键盘布局?
我的第一个和第二个文本框接受泰米尔语字母。 IN Tamil 有很多可用的键盘布局。默认情况下,在 Windows 10 中,可以使用泰米尔语注音键盘、泰米尔语 99 键盘和泰米尔语传统键盘。现在我想以编程方式 select Keybaord 布局...
例如。在我的第一个文本框中,我需要分配一个“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()
所以 Qt 不提供这个,但你可以让你的 OS 为你做。
假设您只是在查看 Windows,您可以使用 pywin32 更改 python 中的当前键盘布局,这样您就可以轻松访问 Windows API 从你的脚本。一旦安装到您的 Python 环境中,您就可以
import win32api
然后使用 win32api.LoadKeyboardLayout('00000809',1)
之类的调用来设置布局(我在此处放置的值将其设置为英国英语)。第一个参数是表示要使用的键盘布局的字符串,第二个是标志。 See documentation.
我找到了 this list of KLIDs(键盘布局 ID),其中显示了两个泰米尔语键盘。 “00000449”是泰米尔语,“00020449”是泰米尔语 99。末尾的 449 表示泰米尔语,前面的两位数字设置要使用哪种泰米尔语键盘子类型(例如 20 代表泰米尔语 99)-我找不到泰米尔语拼音,但也许你能找到它。
您可以将程序设置为在需要切换键盘时调用这些函数(例如,当您的用户激活特定的文本输入框时)。
此外,如果您想检查当前的键盘布局,您可以使用 win32api.GetKeyboardLayout(0)
(doc)。也许您可以使用它来确定您要使用的每个泰米尔语键盘的 ID 是什么。请注意,它 returns 是区域设置 ID 的整数而不是字符串。
其他有用的键盘相关函数是 win32api.GetKeyboardLayoutList()
(查找当前机器上安装的所有语言环境)、win32api.GetKeyboardLayoutName()
和 win32api.GetKeyboardState
- documentation for all these can be found here.
你的代码对我来说工作得很好。并且无需更改 senthamil
字体的键盘布局。确保您的计算机上安装了 senthamil font
。 Link to download senthamil
如果您想以编程方式更改键盘布局,您可以这样做:
from win32api import LoadKeyboardLayout # pypi.org/project/pywin32/
class Diff_Language(QWidget):
def box2Pressed(self, event):
print("Pressed 2nd box")
LoadKeyboardLayout("00000409", 1) #
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;
将在泰米尔语中键入泰米尔语。
windowsos已经回复了,如果linux系统需要,必须使用setxbmap命令。
或者这种 python api/utility
https://pypi.org/project/keyboard-switch/
是否可以在 Pyqt5 中以编程方式更改输入键盘布局?
我的第一个和第二个文本框接受泰米尔语字母。 IN Tamil 有很多可用的键盘布局。默认情况下,在 Windows 10 中,可以使用泰米尔语注音键盘、泰米尔语 99 键盘和泰米尔语传统键盘。现在我想以编程方式 select Keybaord 布局...
例如。在我的第一个文本框中,我需要分配一个“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()
所以 Qt 不提供这个,但你可以让你的 OS 为你做。
假设您只是在查看 Windows,您可以使用 pywin32 更改 python 中的当前键盘布局,这样您就可以轻松访问 Windows API 从你的脚本。一旦安装到您的 Python 环境中,您就可以
import win32api
然后使用 win32api.LoadKeyboardLayout('00000809',1)
之类的调用来设置布局(我在此处放置的值将其设置为英国英语)。第一个参数是表示要使用的键盘布局的字符串,第二个是标志。 See documentation.
我找到了 this list of KLIDs(键盘布局 ID),其中显示了两个泰米尔语键盘。 “00000449”是泰米尔语,“00020449”是泰米尔语 99。末尾的 449 表示泰米尔语,前面的两位数字设置要使用哪种泰米尔语键盘子类型(例如 20 代表泰米尔语 99)-我找不到泰米尔语拼音,但也许你能找到它。
您可以将程序设置为在需要切换键盘时调用这些函数(例如,当您的用户激活特定的文本输入框时)。
此外,如果您想检查当前的键盘布局,您可以使用 win32api.GetKeyboardLayout(0)
(doc)。也许您可以使用它来确定您要使用的每个泰米尔语键盘的 ID 是什么。请注意,它 returns 是区域设置 ID 的整数而不是字符串。
其他有用的键盘相关函数是 win32api.GetKeyboardLayoutList()
(查找当前机器上安装的所有语言环境)、win32api.GetKeyboardLayoutName()
和 win32api.GetKeyboardState
- documentation for all these can be found here.
你的代码对我来说工作得很好。并且无需更改 senthamil
字体的键盘布局。确保您的计算机上安装了 senthamil font
。 Link to download senthamil
如果您想以编程方式更改键盘布局,您可以这样做:
from win32api import LoadKeyboardLayout # pypi.org/project/pywin32/
class Diff_Language(QWidget):
def box2Pressed(self, event):
print("Pressed 2nd box")
LoadKeyboardLayout("00000409", 1) #
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;
将在泰米尔语中键入泰米尔语。
windowsos已经回复了,如果linux系统需要,必须使用setxbmap命令。 或者这种 python api/utility https://pypi.org/project/keyboard-switch/