PyQtNode Editor 以其独特的功能和灵活的扩展性,吸引了众多开发者的目光。
这篇博客作为系列开篇,将详细介绍开发 PyQtNode Editor 所需的基础环境、安装步骤,同时深入解读一段简单的 PyQt5 代码,为后续的开发工作奠定基础。
一、开发基础环境介绍
- Python
Python 是一种高级、解释型的编程语言,以其简洁、易读的语法和丰富的库而闻名。在 PyQtNode Editor 的开发中,Python 作为核心编程语言,负责实现各种逻辑和功能。它的动态类型系统和自动内存管理机制,让开发者能够更专注于业务逻辑的实现,提高开发效率。目前,Python 有 2.x 和 3.x 两个主要版本系列,在开发 PyQtNode Editor 时,推荐使用 Python 3.x 版本,因为它在性能、安全性和新特性上都有显著提升,并且得到了更广泛的支持。 - PyQt5
PyQt5 是 Python 编程语言和 Qt 库的成功融合,Qt 是一个跨平台的 C++ 图形用户界面应用程序框架,功能强大且稳定。而 PyQt5 通过提供 Python 绑定,让开发者能够使用 Python 语言轻松创建具有丰富用户界面的应用程序。它包含了大量的模块,涵盖了图形绘制、事件处理、网络通信等多个方面,为开发 PyQtNode Editor 提供了全面的功能支持。无论是创建简单的窗口,还是复杂的交互式界面,PyQt5 都能满足需求。 - 开发工具
PyCharm 是一款专业的 Python 集成开发环境(IDE),它具有强大的代码编辑、调试、智能提示等功能,能够帮助开发者快速定位和解决问题。建议采用Pycharm.
二、基础环境安装步骤
安装python
安装 PyQt5
pip install PyQt5
三、验证安装环境简单的例子
现在我们来详细解读以下这段代码,它是使用 PyQt5 创建一个简单窗口程序的基础示例:
import sys
from PyQt5.QtWidgets import *
if __name__ == '__main__':
app = QApplication(sys.argv)
label = QLabel("Hello, PyQt5!")
label.show()
sys.exit(app.exec_())
代码详细解释:
- 导入模块
import sys
from PyQt5.QtWidgets import *
import sys:导入 Python 的sys模块,该模块提供了对 Python 解释器相关变量和函数的访问。在这个程序中,sys.argv用于获取命令行参数,后续会将其传递给QApplication对象,以便应用程序能够接收外部传入的参数信息。
from PyQt5.QtWidgets import *:从PyQt5.QtWidgets模块中导入所有的类和函数。QtWidgets模块是 PyQt5 中用于创建用户界面元素(如窗口、按钮、标签等)的核心模块。通过这种导入方式,我们可以直接使用QtWidgets模块中的各种类,无需每次都指定完整的模块路径。
2. 主程序入口
if __name__ == '__main__':
这是 Python 程序的主入口判断语句。当直接运行这个 Python 脚本时,__name__变量的值会被设置为’main’,此时,该条件下的代码块会被执行;而当这个脚本作为模块被其他脚本导入时,__name__变量的值将是模块名,这段代码块就不会被执行。这种机制确保了主程序逻辑只在直接运行脚本时执行,避免了在被导入时不必要的代码执行。
3. 创建应用程序对象
app = QApplication(sys.argv)
QApplication类是 PyQt5 应用程序的核心,它管理着应用程序的控制流和主要设置,包括事件处理、应用程序的生命周期等。这里通过传入sys.argv创建了一个QApplication对象app,使得应用程序能够处理命令行传入的参数,例如设置应用程序的名称、图标等信息。在一个 PyQt5 应用程序中,必须且只能有一个QApplication对象。
4. 创建标签并显示
label = QLabel("Hello, PyQt5!")
label.show()
label = QLabel(“Hello, PyQt5!”):创建了一个QLabel对象label,QLabel是 PyQt5 中用于显示文本或图像的控件。这里通过传入字符串 “Hello, PyQt5!”,将该文本设置为标签的显示内容。
label.show():调用show()方法,将创建好的标签控件显示在屏幕上。如果不调用show()方法,控件将不会被绘制和显示。
5. 进入应用程序主循环并退出
sys.exit(app.exec_())
app.exec_():启动 PyQt5 应用程序的主循环。在主循环中,应用程序不断地检测和处理各种事件(如鼠标点击、键盘输入等),保持应用程序的运行状态,直到用户关闭所有窗口或显式地退出应用程序。
sys.exit():当app.exec_()返回时,表示应用程序的主循环结束,此时通过sys.exit()方法来安全地退出 Python 程序。传入app.exec_()的返回值作为sys.exit()的参数,通常app.exec_()返回 0 表示正常退出,其他值表示异常退出,这样可以在程序外部获取应用程序的退出状态,进行进一步的处理。
得到运算结果:
四、创建窗口以及画布、网格
在 PyQtNode Editor 的开发过程中,我们常常需要自定义图形场景。接下来,就为大家详细解释一段用于创建自定义图形场景的代码
创建一个node_graphics_scene.py文件:
4.1 导入必要的模块
import math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
这部分代码就像是我们开工前准备的工具箱。import math 是引入了 Python 里专门用来处理数学计算的工具,后面计算网格位置的时候会用到;from PyQt5.QtWidgets import * 是把 PyQt5 里用来搭建各种窗口、按钮这些界面元素的工具全拿了过来;from PyQt5.QtCore import * 则是搬来了管理程序运行、处理事件等核心功能的工具;from PyQt5.QtGui import * 是把负责画画、处理字体这些图形相关的工具也准备好了。
4.2 定义自定义图形场景类
class QDMGraphicsScene(QGraphicsScene):
这里我们定义了一个新的 “东西”,叫做 QDMGraphicsScene 类,它是从 QGraphicsScene 这个已有的类 “继承” 过来的。打个比方,QGraphicsScene 是一辆基础款汽车,我们的 QDMGraphicsScene 就是在这辆基础款汽车上进行改装升级,让它更符合我们开发 PyQtNode Editor 的需求,成为一个自定义的图形场景。
类的初始化方法
def __init__(self, parent=None):
super().__init__(parent)
self.gridSize = 20
self.gridSquares = 5
self._color_background = QColor("#393939")
self._color_light = QColor("#2f2f2f")
self._color_dark = QColor("#292929")`在这里插入代码片`
self._pen_light = QPen(self._color_light)
self._pen_light.setWidth(1)
self._pen_dark = QPen(self._color_dark)
self._pen_dark.