Python PyQt5-显示虚拟键盘

Python PyQt5-显示虚拟键盘,python,pyqt,pyqt5,qtvirtualkeyboard,Python,Pyqt,Pyqt5,Qtvirtualkeyboard,我正试图弄清楚如何在Windows上使用Python3.8和PyQt5为触摸屏使用虚拟键盘 我看到Qt有自己的插件QtVirtualKeyboard。我基本上遵循了已经完成的工作,首先安装了支持虚拟键盘的Qt5.15,然后设置了环境变量 下面是一个简单的代码示例: import os import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QLineEdit from PyQt5.QtWid

我正试图弄清楚如何在Windows上使用Python3.8和PyQt5为触摸屏使用虚拟键盘

我看到Qt有自己的插件QtVirtualKeyboard。我基本上遵循了已经完成的工作,首先安装了支持虚拟键盘的Qt5.15,然后设置了环境变量

下面是一个简单的代码示例:

import os
import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidget

os.environ["QT_IM_MODULE"] = "qtvirtualkeyboard"


class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.line_edit = None
        self.init_ui()

    def init_ui(self):
        self.line_edit = QLineEdit()
        self.line_edit2 = QLineEdit()
        self.layout = QVBoxLayout()
        self.main_widget = QWidget()
        self.main_widget.setLayout(self.layout)
        self.layout.addWidget(self.line_edit)
        self.layout.addWidget(self.line_edit2)
        self.setCentralWidget(self.main_widget)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

这样做的目的是在触摸行编辑时显示键盘。目前,窗口会正确显示,但不会弹出键盘。我试图在上面的链接中设置(“QT_DIR”、“QT_PLUGIN_PATH”…),但没有任何效果


我知道我遗漏了什么,但我不知道是什么。谢谢你的帮助

首先,使用与Qt VirtualKeyboard关联的二进制文件,不安装我使用过的Qt(在本例中,安装了Qt 5.15,但建议使用用于编译pyqt5的相同版本:
python-c“从pyqt5.QtCore导入Qt_version_STR;打印('Qt version',Qt_version_STR')
):

然后它位于PyQt5前缀路径所在的位置:

python -c "from PyQt5.QtCore import QLibraryInfo; print('QT_PREFIX_PATH:', QLibraryInfo.location(QLibraryInfo.PrefixPath))"
输出:

QT_PREFIX_PATH: C:/Users/eyllanesc/qt_env/lib/site-packages/PyQt5/Qt
然后,您必须将以下内容从安装Qt的文件夹(该文件夹称为Qt)复制到PyQt5的前缀路径(通过前面的命令获得):

  • 将“qt/5.15.0/msvc2019_64/bin/Qt5VirtualKeyboard.dll”文件复制到“qt_前缀_路径/bin”文件夹中
  • 创建文件夹“QT\u PREFIX\u PATH/plugins/platforminputcontexts”
  • 将“qt/5.15.0/msvc2019_64/plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll”文件复制到“qt_PREFIX_PATH/plugins/platforminputcontexts”文件夹
  • 将“qt/5.15.0/msvc2019_64/plugins/virtualkeyboard”文件夹复制到“qt_PREFIX_PATH/plugins”文件夹
  • 将“qt/5.15.0/msvc2019_64/qml/QtQuick/VirtualKeyboard”文件夹复制到“qt_前缀_路径/qml/QtQuick”文件夹

对于linux,它类似于:

python -m aqt install 5.15.0 linux desktop -m qtvirtualkeyboard --outputdir qt
然后

  • 将“qt/5.15.0/gcc_64/bin/libQt5VirtualKeyboard.so.5”文件复制到“qt_前缀_路径/lib”文件夹中
  • 创建文件夹“QT\u PREFIX\u PATH/plugins/platforminputcontexts”
  • 将“qt/5.15.0/gcc_64/plugins/platforminputcontexts/libqtwirtualkeyboardplugin.so”文件复制到“qt_前缀路径/plugins/platforminputcontexts”文件夹
  • 将“qt/5.15.0/gcc_64/plugins/virtualkeyboard”文件夹复制到“qt_PREFIX_PATH/plugins”文件夹
  • 将“qt/5.15.0/gcc_64/qml/QtQuick/VirtualKeyboard”文件夹复制到“qt_前缀_路径/qml/QtQuick”文件夹

我对qvirtualkeyboard不太熟悉,但我可以告诉您手动操作的最简单方法。有一个名为getkey的模块,可以使用
pip install getkey
命令安装该模块。使用它,您可以更动态地处理按键。通过一点工作,您可以创建一系列按钮,单击这些按钮可触发一些键码,例如:

key = getkey()
btn = QPushButton("UP Arrow Button")
btn.clicked.connect(someFunc)
然后

def someFunc:
    key = keys.UP
瞧!如果单击它,它的作用类似于向上箭头键。再加上一点创意,您只能在QLineEdit处于焦点时弹出键盘。 只是一些想法。。。
希望这有帮助

你编译过qtvirtualkeyboard吗?@eyllanesc我真的认为这是通过Qt可执行文件安装插件时自动完成的。我正在研究如何编译它(我忘了提到我是Qt新手)并让你知道它是如何运行的…@eyllanesc我通过Qt创建者编译了qtvirtualkeyboard(使用MingGW和MSVC进行了编译,没有任何错误),并运行了“make install”。我可以很容易地使用键盘与C++代码示例,但是,不是用PyQT5,没有显示上面的小脚本。非常感谢您的帮助,它工作!有充分文件证明的答案。谢谢,伙计,我也在努力解决这个问题。只是一个小小的修正,我遵循linux的步骤,我认为1。step有一个拼写错误。bin文件夹不包含。因此,这些文件位于lib文件夹中。因此,对于linux,您必须将bin路径更改为lib,libQt5VirtualKeyboard.So.5是一个符号链接,因此我们也需要复制它指向的文件(在我的例子中是libQt5VirtualKeyboard.So.5.14.0)。
def someFunc:
    key = keys.UP