Pyqt5 调用软键盘
安装Python3.7 和Pyqt 5.15.1, 代码加os.environ[“QT_IM_MODULE”] = “qtvirtualkeyboard” 还是不够的!
解决方法:参考 链接
首先无需安装Qt5.15
(1)Python安装aqtinstall库,命令行:python -m pip install aqtinstall, 当然也可以下载轮子文件,但要安装其依赖库。
(2)查看Pyqt 版本,方法一:Pycharm->file->settings->Project Interpreter, 找到qt5-applications->version我的是5.15.1.1, 方法二:如下输出第一行为后面要用粘贴的目标文件夹,第二行为版本号。
from PyQt5.QtCore import QT_VERSION_STR, QLibraryInfo
print(QLibraryInfo.location(QLibraryInfo.PrefixPath))
print('version', QT_VERSION_STR)
输出:
C:/Users/XXXX/AppData/Local/Programs/Python/Python37/lib/site-packages/PyQt5/Qt
version 5.15.1
(3)命令行:python -m aqt install 5.15.1(此处为Pyqt5版本号) windows desktop win64_msvc2019_64 -m qtvirtualkeyboard --outputdir qt
我的是Win10 64位,apt使用见 链接,等个三五分钟(视网速而定),如下:
在命令行的文件夹下(我的是C:\Users\XXXXX>)找到生成的qt文件夹。
(4)1复制"qt/5.15.0/msvc2019_64/bin/Qt5VirtualKeyboard.dll" 文件粘贴到(2)中的“目标文件夹/bin”内。
2在“目标文件夹/plugins”下新建platforminputcontexts文件夹。
3复制“qt/5.15.1/msvc2019_64/plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll” 文件到上一步新建的 “目标文件夹/plugins/platforminputcontexts” 文件夹内。
4 复制"qt/5.15.1/msvc2019_64/plugins/virtualkeyboard" 文件夹到 “目标文件夹/plugins” 文件夹内。
5复制"qt/5.15.1/msvc2019_64/qml/QtQuick/VirtualKeyboard" 文件夹到 “目标文件夹/qml/QtQuick” 文件夹内。
(5)测试代码:
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_())
效果如下:
另外,如果QLabel设置inputMethodHints,比如"ImhDigitsOnly"勾上则会只弹出数字软键盘。
最后,如果QDialog 窗口设置模态,windowModality 设置为WindowModal, 不要设置为ApplicationModal否则软键盘虽然弹出来仍然使用不了。
欢迎留言讨论,Q562604218。