VS2017+PyQt5环境配置
VS2017里使用PyQt5
csdn里有几篇文章可以参考,各有不完整,或不再适用最新版的VS2017 15.9.10。
这里特别整理记录一下。
VS2017的安装
为了简单起见,建议安装时,将python相关的都勾选上,尤其是选择了python模块后,安装页面右边的一些非默认勾选组件,都选上。
- 如果安装路径默认的话,那么安装完成后,python相关的在C:\Program Files (x86)\Microsoft Visual Studio\Shared
- 有anaconda3,也有Python36;
- 使用VS2017开发python时,可以选择使用自己喜欢的python环境,具体方法:
在加载的解决方案中,右键Python环境,添加/删除Python环境 - anaconda也是一个比较好的python环境。
以使用Python环境为例,说明配置PyQt5过程
- 查看是否安装了opencv-python,pyqt5,pyqt5-tools
在命令行中,进入到此目录下 C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts,
输入pip list
PyQt5 整个Qt5的Python实现框架
PyQt5-tools PyQt5开发的一些工具,例如GUI设计的designer,将ui转为py文件的pyuic.exe - 缺少哪个,就安装哪个
在刚才的Scripts目录下(或者已经将该目录添加到了PATH,就可以在任意目录),
opencv-python,pyqt5-tools类似安装pip3 install -i https://mirrors.zte.com.cn/pypi/simple pyqt5 --trusted-host mirrors.zte.com.cn - 安装完后,确认是否存在pyuic5.exe
在C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\Scripts下应该有pyuic5.exe pyrcc5.exe pyqt5designer.exe - 如果先安装pyqt5,本贴编写时下载的版本是5.12,但pyqt5-tools是5.11
是否有不兼容的地方,待后续使用观察 - 利用VS2017的外部工具配置pyqt5的调用以及qt ui转换为py文件
- vs2017菜单栏的工具,弹出菜单中,选择外部工具:
新建一个名字为QtDesigner的外部工具链接,如下图:
命令:找到安装好的pyqt5designer.exe,如果使用anaconda,anaconda3.6下安装的pyqt5的designer,文件名就是designer.exe
参数:启动designer是默认打开生成的ui文件名,如果不设置,就是untitled,根据个人喜好,是否设置默认值。不设置此项则保存文件时,会提示输入文件名的。
初始目录:默认保存ui文件的文件夹,一般设置为跟项目一样。
类似过程,新建一个PyUIC5的外部工具链接:
命令:找到pyuic5.exe
参数:默认将选中的ui文件,转换为py文件
初始目录:一般设置为项目相同
类似的,继续新建PyRCC5的链接:
命令:找到pyrcc5.exe
参数:将选中的ui文件,转换为py文件
初始目录:一般跟项目相同
上述3个新建工具界面中,
a、提示输入参数,勾选,则调用时会弹出确认框
b、使用输出窗口,勾选,则打开一个输出窗口,显示执行结果
至此,配置完成。
动手第一个vs2017下的pyqt5程序
- 新建一个python解决方案,设置好python环境
可以选择python,也可以选择anaconda - VS2017的工具启动QtDesigner
新建一个ui,并保存 - 将刚才生成的ui加到项目中
添加,现有文件,注意类型选所有 - 利用工具里的PyUIC5,将ui转为py
选中刚加入的ui文件,工具=》PyUIC5
这个ui文件,其实就是xml格式存储的
如果配置外部工具时,勾选了提示参数,则会弹出下图确认 - 将转换出来的py文件添加到项目
6. 在应用程序的主py中,进行相关动作编码
本贴在HellowPyQt5InVS2017.py中添加处理代码
# -*- coding: utf-8 -*-
from HellowPyQt5InVS2017Form import Ui_Dialog
# import PyQt5
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QImage, QPixmap
class MyWindow(QMainWindow, Ui_Dialog):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setupUi(self)
self.pushButton.clicked.connect(self.OnPushButton1)
num = 0
def OnPushButton1(self):
self.textEdit.append("HellowPyQt5")
self.num += 1
self.setWindowTitle("pushbutton has been clicked {0} times".format(self.num))
return None
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = MyWindow()
mainWindow.show()
sys.exit(app.exec_())
- 执行结果