用 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())
执行此代码文件,效果如下图:
看到上述窗口,说明 PySide 6 配置无误。
用 VS Code 搞Qt6:使用 PySide 6的更多相关文章
- 用VS Code搞Qt6:至简窗口部件——QWidget
在正题开始之前,老周照例扯点别的.嗯,咱们扯一下在 VS 2022 下结合 CMake 开发 Qt6 时的环境变量设置问题.在VS Code 中,通够通过 CMake Tools 扩展的配置来设置环境 ...
- 用VS Code搞Qt6:编译源代码与基本配置
先说明一下,本水文老周仅讨论新版的 Qt 6,旧版的 Qt 不讨论. 尽管 Qt 有自己的开发环境,但老周必须说句不装逼的话:真的不好用.说起写代码,当然了,用记事本也能写.但是,有个高逼格的工具,写 ...
- 用VS Code搞Qt6:编译附加模块
上一次水文中,老周所介绍的是编译 Qt 的基础模块-- qtbase.一次性编译所有代码可以一劳永逸,但体积相当大,编译时间较长,CPU负载大发热大,风扇转得猛,电费交得多.因此老周更喜欢分开来编译. ...
- 用 VS Code 搞 Qt6:信号、槽,以及QObject
Qt 里面的信号(Signal)和槽(Slot)虽然看着像事件,但它实际上是用来在两个对象之间进行通信的.既然是通信,就会有发送者和接收者. 1.信号是发送者,触发时通过特有的关键字"emi ...
- 用 VS Code 搞 Qt6:让信号和槽自动建立连接
Qt 具备让某个对象的信号与符合要求的槽函数自动建立连接.弄起来也很简单,只要调用这个静态方法即可: QMetaObject::connectSlotsByName(...); connectSlot ...
- 用VS Code搞Qt 6:Gui基础类型——QGuiApplication和QWindow
在99.996%的情况下,我们弄 Qt 应用都会使用 QApplication 类和 QWidget 类,即直接用 Widgets 库中的组件/控件.为了方便开发人员自己造轮子,Qt 也提供了一套基础 ...
- 入侵拿下DVBBS php官网详细过程(图)
几 个月前,DVBBS php2.0暴了一个可以直接读出管理员密码的sql注入漏洞,当时这个漏洞出来的时候,我看的心痒,怎么还会有这么弱智的漏洞,DVBBS php2.0这套代码我还没仔细看过,于是5 ...
- Qt Python Scriptable Application
Qt Python Scriptable Application eryar@163.com Abstract. Python and C++ are in many ways as differen ...
- Ural 1780 Gray Code 乱搞暴力
原题链接:http://acm.timus.ru/problem.aspx?space=1&num=1780 1780. Gray Code Time limit: 0.5 secondMem ...
随机推荐
- Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找
The link to problem:Problem - D - Codeforces D. Range and Partition time limit per test: 2 second ...
- 9.2 DAG上的动态规划
在有向无环图上的动态规划是学习动态规划的基础,很多问题都可以转化为DAG上的最长路,最短路或路径计数问题 9.2.1 DAG模型 嵌套矩形问题: 矩形之间的可嵌套关系是一种典型的二元关系,二元关系可以 ...
- Vue 配置代理
说明:这里的vue代理是指用vue静态服务器做代理.使用的是 http-proxy-middleware 这个模块(这个模块相当于是node.js的一个插件). 版本: vue-cli 3.0以上 修 ...
- 关于KeyFile的破解,含注册机源代码
程序来自于<加密与解密3>的第五章的PacMe.exe.书中并没有给出C语言实现的加密与解密代码,自己花了一些时间,把代码还原了,并且写了一个C语言的注册机. 加密原理:正如书中所说,此程 ...
- Vim基础用法,最常用、最实用的命令介绍(保姆级教程)
配置文件设置 set number (设置行号) set nocompatible (设置不兼容vi模式,不设置会导致许多vim特性被禁用) set clipboard=unnamed (设置普通的复 ...
- powershell 执行策略
前言 上一篇博文,我介绍了一下powershell和cmd的对比.通过学习,我发现powershell的确比cmd更加power,也更加适应现在的使用场景. 那么本文将继续介绍一个powershell ...
- MySQL 数据操纵语句
插入 插入多个字段 insert into grade (`name`) values ('大一'),('大二'),('大三'),('大四'); 修改 设置时间为当前时间 update `studen ...
- Go语言 context包源码学习
你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 日常 Go 开发中,Context 包是用的最多的一个了,几乎所有函数 ...
- TypeScript 项目报错 Unknown file extension ".ts"
下图是该问题的详细报错截图,经过多次捣鼓,初步猜测是模块有问题,要用 ES Module 还真是曲折,最不容易出错的就是 CommonJS 模块: 在百度.Bing 上搜索了好久的帖子也都没有相关的解 ...
- win10电脑自动连接蓝牙设备攻略
每次在电脑上想连接蓝牙耳机,但不想手动去连接怎么办呢? 自动连接! 其实微软已经解决了这个问题,只要打开蓝牙,他就会自动匹配上次连接的设备 打开设置--->设备勾选 "显示使用&quo ...