当前位置:首页 > 技术 > 正文内容

用 VS Code 搞Qt6:使用 PySide 6

Lotus2022-10-06 18:16技术

一般来说,用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())

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

 

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

 

扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/111.html

分享给朋友:

“用 VS Code 搞Qt6:使用 PySide 6” 的相关文章

2022.9.30 Java第四次课后总结

1.public class BoxAndUnbox { /** * @param args */ public static void main(String[] args) { int value=100; Integer obj=value; //装箱 int result=obj*2; //拆箱 } } 创建了一个value 并定义了相关变量 public cl...

IPv6报文头深度解析

IPv6报文由IPv6基本报文头、IPv6扩展报文头以及上层协议数据单元3部分组成。上层协议数据单元一般由上层协议报文头和它的有效载荷构成,上层协议数据单元可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。 1、IPv6基本报文头 IPv6基本报文头有8个字段,固定大小为40 Byte,每一个IPv6数据报都必须包含基本报文头。基本报文头提供报文转发的基本信息,由转发路径上的所有设备解...

JS奇淫技巧:数值的七种写法

JS奇淫技巧:数值的七种写法 JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手 你知道吗?在JS编程中,数值可以有很多种写法。 第一种写法: 一般情况而言,数值就是数值。 比如: var a = 1; 你可知,这个1可以有很多种变形的写法,甚至是变态的写法。 第二种写法: var a= +!!{}; console.log(a); 即:1变成了+!!{}。 数值1为什么能...

Python基础(九) | time random collections itertools标准库详解

⭐本专栏旨在对Python的基础语法进行详解,精炼地总结语法中的重点,详解难点,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握python编程,同时为后续的数据分析,机器学习及深度学习的代码能力打下坚实的基础。 ????本文已收录于Python基础系列专栏: Python基础系列教程 欢迎订阅,持续更新。 Python自身提供了比较丰富的生态,拿来即用,可极大的提高开发效率 9...

Python Scala中使用def语句定义方法的详细过程

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Scala中使用def语句定义方法的详细过程,Scala的方法是类的一部分,而函数是一个对象可以赋值给一个变量,下面一起来看一下,希望对大家有帮助。 程序员必备接口测试调试工具:立即使用 Apipost = Postman + Swagger + Mock + Jmeter Api设计、调试、文档、自动化测试工具...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。