【问题标题】:PyQt5 - Show virtual keyboardPyQt5 - 显示虚拟键盘
【发布时间】:2020-10-09 21:24:36
【问题描述】:

我正在尝试弄清楚如何在 Windows 上使用 python 3.8 和 PyQt5 使用虚拟键盘来实现触摸屏。

我看到Qt有他自己的插件QtVirtualKeyboard。我几乎遵循in this link 所做的工作,首先安装支持虚拟键盘的 Qt 5.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",...),但没有任何效果。

我知道我在那里遗漏了一些东西,但不知道是什么。感谢您的帮助!

【问题讨论】:

  • 你编译过qtvirtualkeyboard吗?
  • @eyllanesc 老实说,我认为它是通过 Qt 可执行文件安装插件时自动完成的。我正在研究如何编译它(我忘了说我是 Qt 新手)并让你知道它是如何进行的......
  • @eyllanesc 我通过 Qt Creator 编译了 qtvirtualkeyboard(使用 MingGW 和 MSVC 编译,没有任何错误),然后运行“make install”。我可以通过 C++ 代码示例轻松地使用键盘,但是,不能使用 PyQt5,上面的小脚本没有显示任何内容。

标签: python pyqt pyqt5 qtvirtualkeyboard


【解决方案1】:

首先,是与 Qt VirtualKeyboard 关联的二进制文件,并且不安装 Qt 我使用了aqtinstall(在此示例中安装了 Qt 5.15,但建议使用与编译 pyqt5 相同的版本:@987654326 @):

python -m pip install aqtinstall
python -m aqt install 5.15.0 windows desktop win64_msvc2019_64 -m qtvirtualkeyboard --outputdir qt

那么它位于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_PREFIX_PATH/bin”文件夹中。
  • 创建文件夹“QT_PREFIX_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_PREFIX_PATH/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_PREFIX_PATH/lib”文件夹。
  • 创建文件夹“QT_PREFIX_PATH/plugins/platforminputcontexts”。
  • 将“qt/5.15.0/gcc_64/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so”文件复制到“QT_PREFIX_PATH/plugins/platforminputcontexts”文件夹。
  • 将“qt/5.15.0/gcc_64/plugins/virtualkeyboard”文件夹复制到“QT_PREFIX_PATH/plugins”文件夹。
  • 将“qt/5.15.0/gcc_64/qml/QtQuick/VirtualKeyboard”文件夹复制到“QT_PREFIX_PATH/qml/QtQuick”文件夹。

【讨论】:

  • 非常感谢您的帮助,它有效!有据可查的答案。
  • 谢谢伙计,我也在为此苦苦挣扎。稍微更正一下,我按照 linux 步骤进行操作,我认为 1. 步骤有错字。 bin 文件夹不包含 .so 文件,它们位于 lib 文件夹中。因此,对于 linux,您必须将 bin 路径更改为 lib,而 libQt5VirtualKeyboard.so.5 是一个符号链接,因此我们也需要复制它指向的文件(在我的情况下为 libQt5VirtualKeyboard.so.5.14.0)。
  • 在树莓派 (Raspbian 10 Buster) 上,最新的 qt 版本是 5.11.3,QT_PREFIX_PATH 是 /usr,并且没有插件和 qml 目录。你知道我应该把文件复制到哪里吗?
【解决方案2】:

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

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

然后……

def someFunc:
    key = keys.UP

瞧!如果单击它,它就像一个向上的箭头键。有了更多的创意,您只能在 QLineEdit 处于焦点时弹出键盘。 只是一些想法... 希望这有帮助!

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 2014-07-03
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多