2015-01-13 286 views
1

我需要编写一个用于输入文本的虚拟键盘,我计划使用Python和Qt(PyQt)库来执行此任务。问题是我不知道如何模拟KeyPress不是内部Qt事件,而是模拟真实的键盘,所以我可以像使用真正的键盘一样使用此键盘 - 与我的计算机上的应用程序交互。我无法在Qt文档中找到任何关于此的信息。那么是否有任何方法通过PyQt/Qt来完成,或者我需要使用一些Python库,以及哪些?如何在Python/PyQt中模拟真正的键盘按键?

+0

所以你的意思是_不喜欢[this](http://stackoverflow.com/qustions/2035310/how-can-i-simulate-user-interaction-key-press-event-in-qt)? – 101

+0

@figs看起来这个函数只能在应用程序内部工作,它需要有接收器小部件。但我需要应用程序来模拟真正的键盘,所以我可以使用应用程序在浏览器中键入文本。 –

+1

它是平台特定的。你不能用Qt做。在Windows上,您可以使用PyWin32来调用WinApi函数。 – Meefte

回答

2

我知道这是一个PyQt问题,但在OP的请求下会给出一个C++示例,以便它可以帮助您找到Python解决方案。

在C++端模拟键盘是通过将keypress事件发布到应用程序的事件循环来完成的。这些可能被认为是“内部Qt事件”,但与物理按键接收到的接口完全相同。他们完成如下:

QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, Qt::Key_Enter); 
QCoreApplication::postEvent (receiver, event); 

通过PyQt的QCoreApplcation API来看,该postEvent功能也存在,所以它应该是可以做到的事情analagous(可惜我不能提供一个例子是我不熟悉写入python脚本)。

+0

感谢您的帮助,但在这种情况下接收器是什么? –

+0

Receiver是'QObject'处理按键事件的。它可能是你的主窗口,文本编辑,其他一些带有按键事件过滤器的小部件等等。基本上,无论你希望哪个'QObject'成为真正的按键处理程序。 –

1

我有同样的问题。

Pyautogui是非常好的,这是愚蠢的简单。

import pyautogui 
pyautogui.typewrite("the stuff") 

或者,如果你想真正模拟按字面按键使用:

import pyautogui 
pyautogui.keypressDown("the stuff") 
pyautogui.keypressUp("the stuff") 

这里的文档:https://pyautogui.readthedocs.org/en/latest/

希望这有助于。