一般来说,用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 配置无误。

用 VS Code 搞Qt6:使用 PySide 6的更多相关文章

  1. 用VS Code搞Qt6:至简窗口部件——QWidget

    在正题开始之前,老周照例扯点别的.嗯,咱们扯一下在 VS 2022 下结合 CMake 开发 Qt6 时的环境变量设置问题.在VS Code 中,通够通过 CMake Tools 扩展的配置来设置环境 ...

  2. 用VS Code搞Qt6:编译源代码与基本配置

    先说明一下,本水文老周仅讨论新版的 Qt 6,旧版的 Qt 不讨论. 尽管 Qt 有自己的开发环境,但老周必须说句不装逼的话:真的不好用.说起写代码,当然了,用记事本也能写.但是,有个高逼格的工具,写 ...

  3. 用VS Code搞Qt6:编译附加模块

    上一次水文中,老周所介绍的是编译 Qt 的基础模块-- qtbase.一次性编译所有代码可以一劳永逸,但体积相当大,编译时间较长,CPU负载大发热大,风扇转得猛,电费交得多.因此老周更喜欢分开来编译. ...

  4. 用 VS Code 搞 Qt6:信号、槽,以及QObject

    Qt 里面的信号(Signal)和槽(Slot)虽然看着像事件,但它实际上是用来在两个对象之间进行通信的.既然是通信,就会有发送者和接收者. 1.信号是发送者,触发时通过特有的关键字"emi ...

  5. 用 VS Code 搞 Qt6:让信号和槽自动建立连接

    Qt 具备让某个对象的信号与符合要求的槽函数自动建立连接.弄起来也很简单,只要调用这个静态方法即可: QMetaObject::connectSlotsByName(...); connectSlot ...

  6. 用VS Code搞Qt 6:Gui基础类型——QGuiApplication和QWindow

    在99.996%的情况下,我们弄 Qt 应用都会使用 QApplication 类和 QWidget 类,即直接用 Widgets 库中的组件/控件.为了方便开发人员自己造轮子,Qt 也提供了一套基础 ...

  7. 入侵拿下DVBBS php官网详细过程(图)

    几 个月前,DVBBS php2.0暴了一个可以直接读出管理员密码的sql注入漏洞,当时这个漏洞出来的时候,我看的心痒,怎么还会有这么弱智的漏洞,DVBBS php2.0这套代码我还没仔细看过,于是5 ...

  8. Qt Python Scriptable Application

    Qt Python Scriptable Application eryar@163.com Abstract. Python and C++ are in many ways as differen ...

  9. Ural 1780 Gray Code 乱搞暴力

    原题链接:http://acm.timus.ru/problem.aspx?space=1&num=1780 1780. Gray Code Time limit: 0.5 secondMem ...

随机推荐

  1. 只会Excel想做图表可视化,让数据动起来?可以,快来围观啦(附大量模板下载)

    前言 之前我们分享过基于echarts 的数据可视化展示,很多朋友就说,不会软件开发,可不可以直接用Excel进行数据化的展示. 答案是肯定的,确实有这种方案,百度查询一查一大推,各种解决方案各种模板 ...

  2. Javascript 构造函数、原型对象、实例之间的关系

    # Javascript 构造函数.原型对象.实例之间的关系 # 创建对象的方式 # 1.new object() 缺点:创建多个对象困难 var hero = new Object(); // 空对 ...

  3. Less混合结合:nth-child()选择器的高级玩法

    1.先看效果图 上图中比较麻烦的是每块的底色处理,下面看怎么处理 2.:nth-child(n) 选择器 匹配属于其父元素的第 N 个子元素,不论元素的类型. n 可以是数字.关键词或公式. 数字:最 ...

  4. docker 部署私人 nuget 服务

    使用docker搭建私有Nuget服务 首先在linux服务器上创建两个容器挂着目录 mkdir /home/nuget/db mkdir /home/nuget/packages 并且对该目录指定写 ...

  5. Luogu5020 货币系统 (完全背包)

    bool型完全背包 #include <iostream> #include <cstdio> #include <cstring> #include <al ...

  6. 使用 Less 混合(Mixins)时报语法错误

    今天在尝试使用 less 的混合语法时,浏览器直接报了一个语法错误.下图是报错信息: 仔细地阅读了官方文档,和对比自己写的,并没有任何错误. .FlexLayout { .Start() { disp ...

  7. 我用Axure制作了一款火影小游戏 | PM老猫

    Axure不仅仅是一个原型工具,除了原型之外还可以用来制作一些静态网页,这点对于不懂代码或前端的同学来说挺实用.之前整理了一版<Axure函数自查表>,因为感觉内容太多又对前端样式及脚本感 ...

  8. JavaScript 设计模式及代码实现——代理模式

    代理模式 1 定义 为其他对象提供一种代理以控制对这个对象的访问 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 2 应用举例 2.1 缓 ...

  9. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一 ...

  10. Java 流处理之收集器

    Java 流(Stream)处理操作完成之后,我们可以收集这个流中的元素,使之汇聚成一个最终结果.这个结果可以是一个对象,也可以是一个集合,甚至可以是一个基本类型数据. 以记录 Record 为例: ...