python win32api.LoadKeyboardLayout(),在IDLE shell中不会更改语言吗?

问题描述 投票:2回答:2

有人可以帮帮我吗...我正在尝试开始我的第一个编程项目。它将在python中实现。

我需要有一个文本框(我正在使用wxpython进行操作)。如果用户在此文本框中输入任何文本,那么我希望它显示为阿拉伯语。我想通过在光标停留在给定的文本框中时自动将用户的键盘更改为阿拉伯语布局来实现此目的。

所以我找到了这个pywin32模块,它具有功能LoadKeyboardLayout()因此,我尝试在IDLE中对此进行测试,以查看是否可以使其接受IDLE中的阿拉伯文本,以查看其是否有效。所以我进入IDLE:

win32api.LoadKeyboardLayout('00000401',1)

然后返回67175425,即十六进制的十进制等效值:'4010401',我认为这是阿拉伯语的语言环境ID。所以我想哇!我已经完成了,但是当我尝试在此之后键入时,在IDLE窗口中,它将继续键入普通的英文字符。

有人可以解释我的错误,并指导我寻求一个好的解决方案。


UPDATE

好的,自发布该死的问题以来,我一直在努力解决这个问题。没运气。然后,我想,“好吧,拧紧它,而不是在IDLE中对其进行快速测试,我将在项目的源代码中就地试用它。”WTF-它第一次起作用,给出了我想要的确切行为。然后,我在另一个IDE的解释窗口中进行了尝试,然后再次尝试成功!

很明显,我的问题是在IDLE的解释模式下。谁能解释为什么它在IDLE shell中不起作用???

python winapi keyboard python-idle
2个回答
5
投票
  1. Windows中的键盘布局设置是按进程(并从父进程继承)
  2. IDLE在其GUI之外的后台进程中运行Python脚本

因此,您已成功更改了正在运行脚本的后台Python进程的键盘布局,但未更改IDLE的GUI。


0
投票

我设法通过键盘事件和快捷方式分配来做到这一点。

  1. 转到“文本服务和输入语言”(这就是所谓的Windows 7控制面板)
  2. 为单向语言分配键。例如“致英语”和“致希伯来语”。我选择了Alt-Shift-7和Alt-Shift-8,因为它们很少在其他地方使用。
  3. 在您的应用中,根据需要发送相应语言的组合键。

注意:

如果“您的应用程序”是一个外部实用程序(我用Python编写了我的应用程序),那么它一定不能调用窗口,否则/ your-app /会占据焦点,并且会改变语言。在python中,我通过使用无GUI的pyw脚本文件名解决了该问题。 (或使用pythonw.exe调用脚本)

本文显示了如何在python中发送键盘事件:

https://python-decompiler.com/article/2012-11/how-to-generate-keyboard-events-in-python

© www.soinside.com 2019 - 2024. All rights reserved.