目录
from PyQt6 import QtWidgets。报错ImportError: DLL load failed: 找不到指定的程序
1、安装pyqt6和pyqt6-tools包
注意:pyqt6-tools目前仅支持python3.9版本,3.9版本后的安装部成功。(截止2022.11.20)
1.1 安装pyqt6和pyqt6-tools
安装pyqt和pyqt6-tools可以使用conda和pip进行安装
(1)首先创建python环境
#利用conda,创建python环境
conda create --name pyqt_env python=3.9
命令如下:
(2)激活pyqt_env环境
#激活pyqt_env环境
conda activate pyqt_env
(3)安装pyqt6和pyqt6-tools,建议使用pip
pip install pyqt6
当看到successfully是表示安装成功。
在安装成功pyqt6后,安装pyqt6-tools
pip install pyqt6-tools
当看到successfully表示成功,出现红色的部分表示有部分包没有安装成功。
1.2 安装pyqt6和pyqt6-tools注意事项
检验上述两个是否安装成功,可以使用 pip show <包名>的情况来查看
#例如
pip show pyqt6-tools
出现以下信息,也表明安装成功了。
注意:在安装过程中,会遇到包下载不了的情况,我们可以使用国内的镜像地址来下载。
#可以使用临时镜像对python包进行下载 pip install pyqt6-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
镜像地址有很多,除了清华的地址,还有:
清华大学(推荐) Simple Indexhttps://pypi.tuna.tsinghua.edu.cn/simple/ |
中国科学技术大学 Simple Indexhttp://pypi.mirrors.ustc.edu.cn/simple/ |
…… |
2、在pycharm中配置pyqt6
在本例的配置中,选择用pycharm的社区版本,2022.2.4版本,最新的pycharm采用了新界面的风格,更轻量化,功能布局更为合理。
2.1 配置designer.exe文件
pyqt开发为我们在python环境中开发提供了可视化界面的编程,配置designer.exe可以方便的进行界面设计和开发。
(1)打开pycharm软件,并新建项目。
pycharm新界面较为简洁
(2)打开设置界面(快捷键Ctrl+Alt+S)
打开设置界面,找到Extenal Tools工具
接下来根据设置界面添加designer.exe文件
修改 Working directory 目录
Working directory 为 $ProjectFileDir$ 对应当前目录
2.2 配置pyuic工具
pyuic工具可以将QtDesigner生成的.ui文件转换为.py文件,相当于通过界面可视化界面设计后,直接将界面文件转化为python代码,这样就极大的提高了代码的编写效率。
紧接上一步骤,点击‘+’号添加pyUIC工具
参数填写
Arguments | $FileName$ -o $FileNameWithoutExtension$.py |
Working directory | $ProjectFileDir$ |
注意:Working directory目录也可以自定义设置
到这里pycharm的配置已经完成。
3、实例测试
可以利用配置好的环境进行简单的界面开发。
3.1 通过可视化界面来实现(qtDesigner)
通过tools--pyqt6--pyqtDesigner可以打开界面设计界面
界面设计可视化界面
选择main window,然后添加一个label,键入“hello world”。
然后保存界面文件为.ui文件,将ui文件保存到和主程序代码相同的路径下。
接下来将.ui文件转化为.py文件,这是可以利用pyUIC工具进行转化
点击pyUIC命令后,程序会将工程内的.ui文件自动转化为.py文件。
UItest.py代码如下,请记住class的名称为Ui_MainWindow
# Form implementation generated from reading ui file 'UItest.ui'
#
# Created by: PyQt6 UI code generator 6.1.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(270, 200, 211, 71))
self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Hello World"))
此时,产生的是为界面代码并不能直接运行,需要将代码绑定到main函数才能运行。将Ui_MainWindow类的名称绑定到ui关键字,使得ui=Ui_MainWindow().
import sys
from PyQt6 import QtGui,QtWidgets
from UItest import Ui_MainWindow
if __name__ == '__main__':
app=QtWidgets.QApplication(sys.argv)
MainWindow=QtWidgets.QMainWindow()
ui=Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
运行上述代码可以得到运行的界面。
3.2 通过代码来实现界面的初始化
通过编写代码也可以实现对pyqt界面的设计,具体代码例子如下:
import sys
from PyQt6.QtWidgets import (QApplication, QWidget,QLabel,QPushButton)
from PyQt6.QtCore import QCoreApplication
# 主窗体
app = QApplication(sys.argv) # 创建应用对象
mainWindow = QWidget() # 构造登陆窗口
mainWindow.setWindowTitle('第一个程序') # 窗口标题
mainWindow.resize(800, 600) # 窗口大小
# 密码Label
pass_Label = QLabel(mainWindow) # 放置在登陆窗口上
pass_Label.setText('你好,世界!!!') # 设置显示文本
pass_Label.move(350, 280) # 设置位置
# 退出按钮
exit_Btn = QPushButton('关闭应用程序', mainWindow)
exit_Btn.clicked.connect(QCoreApplication.instance().quit) # 绑定退出事件
exit_Btn.move(350,350)
mainWindow.show() #显示窗体
sys.exit(app.exec()) #进入消息循环
程序运行效果如图:
3.3 两种开发方法的对比
两种方法没有本质的区别,主要是在效率上的区别
- 采用代码编写的时候,需要大量的代码来实现界面控件的位置、属性和内容等。
- 采用Designer来设计界面,可以实现可视化的编程,较为适合从C#.NET开发者等的入门。能够很好的实现业务与设计分离。
4、配置中存在的问题
由于pyqt6和pyqt6-tools两个包不一样,容易导致如下问题
from PyQt6 import QtWidgets。报错ImportError: DLL load failed: 找不到指定的程序
要解决此问题只需要将pyqt6和pyqt6-tools的版本进行统一就可以了。
具体可以这样操作,首先利用
pip list
命令查看包的安装列表
从上图可以看出pyqt和pyqt6-tools的版本不一致,可以pyqt6-qt6包卸载,重新安装pyqt6-qt6包为6.1.0版本,既可以解决找不到指定程序的错误。
参考资料
PyCharm中使用PyQt实现UI界面设计 - fengMisaka - 博客园
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程_思绪无限的博客-CSDN博客
【python】PyQt6和pyqt6-tools在PyCharm2021的详细配置方法_特大辉哥的博客-CSDN博客
Python之pip命令指定安装源和版本_慕城南风的博客-CSDN博客
pyqt6 vscode ImportError: DLL load failed while importing QtGui: 找不到指定的程序。_mengyu822_csdn的博客-CSDN博客