1

用 VS Code 搞Qt6:使用 PySide 6 - 东邪独孤

 1 year ago
source link: https://www.cnblogs.com/tcjiaan/p/16757396.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

用 VS Code 搞Qt6:使用 PySide 6

一般来说,用C++写 Qt 应用才是正宗的,不过,为了让小学生也能体验 Qt 的开发过程,或者官方为了增加开发者人数,推出了可用 Python 来编程的 Qt 版本。此版本命名比较奇葩,叫 PySide,与 Qt 6 配套的是 PySide 6。当前最新版本是 6.3.2。

PySide 的优势在于它是官方维护的,完全是C++开发的。在原有库基础上增加了对应的 .pyd 文件,对 API 做了封装,并由 .pyi 文件进行类型规范。在性能上是不用担心的,但是,这种开发方式用来学习较适合,真要做个应用程序,还是用C++好,编译出来就能用了。Python 写的话打包要用其他工具,也麻烦,对于脚本语言,还得到处带上个解析器。

PySide 6 可以通过 pip 直接安装就行了。

在安装之前,老周建议先创建个虚拟环境。一来专用性强,二来方便打包。假设我要把虚拟环境存放在神奇的 E 盘下的 MyEnv 目录下,那么,可以执行:

python -m venv E:\MyEnv
python3 -m venv E:\MyEnv

虚拟环境可以创建一个隔离的区域,有独立的 python 解析器、pip 程序等。每个虚拟环境互不干扰。在虚所环境的 Scripts 目录(Linux是 bin 目录)下,有两个文件很有用。要启用虚拟环境,就执行 activate 文件;要退出虚拟环境,执行 deactivate 文件。

接下来在刚建立的虚拟环境中安装 PySide 6。先执行 activate 文件激活环境,然后执行命令:

pip install PySide6

如果不能下载或下载特慢,请换国内的清华大学源。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PySide6

详细的使用方法请自行查看帮助说明,此话题对本文而言已超纲。

------------------------------------------------------------------------------------------------------------------------------------

接下来该到 VS Code 了。不需要什么特殊配置,安装微软官方的 Python 扩展即可。

但是,不过,可是,然而,要注意:要先执行虚拟环境中的 activate 文件,然后在当前运行环境不变的前提下启动 VS Code。在VS Code中也需要使用虚拟环境所设置的环境变量。为了人性化,咱们可以在桌面上建一个批处理文件,然后输入以下内容:

@echo off
call E:\MyEnv\Scripts\activate.bat
start C:\<你的VS Code 路径>\VSCode\Code.exe
exit

第一行不解释了,可自行度娘。第二行是用 CALL 命令调用 activate 文件(在 Windows 上它是个批处理文件),这样虚拟环境就激活了。第三行使用 start 命令启动 VS Code,这样 VS Code 就具备了虚拟环境的上下文和环境变量了。第四行退出这个批处理文件,这是为了关掉命令行窗口。此处不必理会 deactivate 文件,毕竟 VS Code 退出后,虚拟环境相关的环境变量就没有了。

当我们要用 PySide 6 时,直接运行批处理文件就完事了。

===================================================================================

PySide 6 的各种类型、模块与 C++ 版本是一样的,只要你会写 Python 代码,基本上可以直接迁移。当然,千万不要像官方文档那样迁移,因为文档的 Python 代码估计是通过机器翻译的,直接将 C++ 译成 Python。所以,你会看到官方文档有很多 Python 代码是错的,根本不能运行。有的连语法都保留了 C++ 特征,压根就不是 Python 代码。

尽管不能直接把 C++ 代码转换成 Python 代码,但是按照 C++ Qt 程序的思路来写代码是没问题的。由于编程语言差异性,是不可能完全兼容的。比如,C++ 版中的许多宏,你不能在 Python 中使用。假如你要从 QObject 类派生,为了使其支持信号和槽,要加上 Q_OBJECT 宏。在 Python 中不需要加,也没有这个,官方封装的库会帮我们完成这个。再如,C++ 中重载的运算符 <<、>> 也不能用,PySide 中没有 QDebug。

在 VS Code 中,解析器选择咱们上面创建的虚拟环境。然后新建一个代码文件,名字随便取。写个简单程序试试。

# 导入要用到的类型
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QWidget

# 自定义类,作为窗口
class MyWindow(QWidget):
    # 构造函数
    def __init__(self, parent = None):
        super().__init__(parent, Qt.Window)
        # 设置窗口标题
        self.setWindowTitle("智能掏粪机")
        # 设置窗口大小
        self.resize(260, 185)

#-------------------------------------------------
if __name__ == '__main__':
    # 先实例化 app 对象
    app = QApplication()
    # 再实例化窗口类对象
    win = MyWindow()
    # 显示窗口
    win.show()
    # 启动消息循环
    app.exec()

最后启动应用程序的代码也可以这样写:

if __name__ == '__main__':
    import sys
    # 先实例化 app 对象
    app = QApplication(sys.argv)
    # 再实例化窗口类对象
    win = MyWindow()
    # 显示窗口
    win.show()
    # 启动消息循环
    sys.exit(app.exec())

执行此代码文件,效果如下图:

367389-20221006122141932-419462613.png

看到上述窗口,说明 PySide 6 配置无误。 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK