PySide2 在 2020 年已经可以 pip 安装后开箱即用了,但是要开发速度快的话,还需要一些额外的工具配置。主要是三个 Qt Design、Qt uic 和 Qt rcc 这三个小工具。此外,对于是否使用 QT Quick 我也有些建议。

Python 版本与 PySide2 安装

由于 MSVC 版本问题,Python2 的 PySide2 无法在 Windows 下无法安装,同时 Python2 已经停止支持,建议使用 Python3 来开发。同时 Python3.8.0 版本的 PySide2 无法在 Windows 下工作,需要更高的如 3.8.1 版本。通常学习开发时使用最新的 Python3 版本就行了。

PySide2 安装很简单:

pip install PySide2

PyCharm 配置三个工具

Qt 官方推荐的开发工具是 Qt Creator,我也尝试了一下。感觉可能更适合 C++ 开发者,对于 Python 的支持程度不行,环境配置、语法补全这些都跟不上,关键还没 PyCharm 好看。对于开发 Python 的,还是使用 PyCharm 更舒服,这个结论社区版也成立。

打开 PyCharm 的 File->Settings,选择左侧 Tools->External Tools,点击 + 号添加以下三个工具。

Name: Qt Designer
Program: C:\works\SmoothPDF\venv\Scripts\pyside2-designer.exe
Working directory: C:\works\SmoothPDF\venv\Scripts
Name: Qt uic
Program: C:\works\SmoothPDF\venv\Scripts\pyside2-uic.exe
Arguments: $FileName$ -o $FileNameWithoutExtension$_ui.py
Working directory: $FileDir$
Name: Qt rcc
Program: C:\works\pytools\venv\Scripts\pyside2-rcc.exe
Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py
Working directory: $FileDir$

我的 PySide2 安装在 virtualenv 的虚拟环境中,所以 Program 也直接从项目中的 venv 文件夹找。三个工具中,Qt Designer 是用来可视化设计界面的。对于新手而言,绝大部分和 UI 设计相关的工作都应该使用 Qt Designer 设计后生成 .ui 文件,而不是用代码一点点码出来。

设计完后导出的 .ui 文件选中,点击 PyCharm 顶部工具栏的 Tools->External Tools->Qt uic 即可在当前目录生成 原文件名_ui.py,在其他 Python 文件中 import 即可直接导入设计好的 ui 布局、组件等。

在 ui 设计中会用到图片等外部资源,最好使用 qrc 文件来导入资源,不知道的话就搜索如何使用 qrc 文件。Qt rcc 工具使用方法同 Qt uic,选中 .qrc 文件,点击 PyCharm 顶部工具栏的 Tools->External Tools->Qt rcc 即在当前目录生成原文件名_rc.py。注意 _rc 最好不要修改成其他的,因为 Qt uic 生成的.py文件默认导入的就是 xxx_rc.py。

Qt Widget 和 Qt Quick

Qt 自从 5 以后就开始推广 Qt Quick,相对于原本的 Qt Widget,通过 Qt Quick 可以快速做出灵活、美观的 UI,同时通过 Qt Quick 甚至可以开发安卓等移动应用。那究竟学 Qt Widget 还是 Qt Quick 呢?

在我看来 Qt Quick 和 Electron 有点像,大概就是在应用里嵌入浏览器,不同的是 Qt 搞了一套 QML 语言,结合了 CSS 和 JavaScript 语言。这样带来的缺点有点多,首先是性能下降、占用资源变多。其次,QML 语言需要花费更多时间学习,网上相关的教程什么很少,而 PySide2 或者 PyQt5 使用 QML 的更是少之又少。

并且 PySide2 中自带的 Qt Designer 并不支持QML,如果需要可视化设计 QML,需要使用 Qt Creator。而这软件就如之前说的,对 Python 支持并不行。相反,如果使用 Qt Widget,将设计全部在 Qt Designer 完成,剩下的工作基本完全是使用 Python 代码编写,相关的资料虽然没有成系统的,但通过搜索绝大多数问题都有解决方法。

因此,现在来看还是推荐学习 Qt Widget,跨三大平台加成熟稳定的方案加足够多的资料,对于绝大多数需求已经足够了。