使用版本&进行过的操作
IDLE使用 Visual Studio 2019 ,在VS内创建工程使用的虚拟环境并进行包的安装 python == 3.7 PyQt5 == 5.15.4 pyqt5-tools == 5.15.4.3.2 PyQt5及pyqt5-tools全部按照教程使用pip 安装(中途报了一个error,将依赖包click从8.*降级至7.0,不过这一步应该没什么影响)
出现的问题
运行如下实例代码后出现了Could not find the Qt platform plugin "windows" in "" 错误,估计是缺少Qt platform 插件,也就是一些必要的dll文件。一开始以为是VS的问题,因为它安装包的时候有一些奇奇怪怪的补全提示(好的我承认对它有偏见XD),后来发现错怪它了
import sys
from PyQt5.Qt import *
from PyQt5 import QtWidgets
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('Hello World!')
window.resize(400, 400)
window.move(1000, 300)
label = QLabel(window)
label.setText('Hello World!')
label.move(160, 160)
window.show()
sys.exit(app.exec_())
查找资料后发现它可能在虚拟环境\Lib\site-packages\PyQt5\Qt\plugins这个路径下,但发现我安装的这个版本的根本没有这个文件夹,所以它肯定是在其他地方。  缺少的dll文件一定在包中,在site-packages中搜索platforms后发现有两个platforms文件夹,但是文件有一点点区别(但都含有qwindows.dll估计都可以)   尝试将环境变量QT_QPA_PLATFORM_PLUGIN_PATH 修改为这两个路径,发现都可以成功跑出结果。如果使用的不是虚拟环境,到这里就可以结束了。
虚拟环境下增加插件
使用虚拟环境必然是要用多个不同版本python 或者是包,如果直接设置环境变量,不同版本用的将会使用同一份dll文件,也许可以但有隐患。所以我选择不直接在系统中修改环境变量,而是在python 文件最前面前人为的加入一个环境变量。这样既不影响其他版本的pyqt,又能实现目的。
import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = 'D:\venvforqt\Lib\site-packages\PyQt5\Qt5\plugins\platforms'
当然这样做还是比较麻烦的,每一次使用pyqt的时候都要加这么两行,暂时还没有想到更好的办法,改动读dll文件的那部分代码应该也可以,但是读源码工程量想想就很大QAQ还是算了干活要紧
|