news 2026/7/7 5:46:25

qtpynodeeditor简介

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qtpynodeeditor简介

qtpynodeeditor简介

    • 简介
      • 🛠️ 主要应用场景
      • 💡 选择与替代方案
    • 安装
    • 文档
    • 示例【示例代码见github官方仓库】
      • Connection colors连线的颜色
      • 图片
      • 自定义样式
      • 好像是一个计算器
    • 基本概念
    • 简单案例

简介

qtpynodeeditor是一个用于在 Python 中创建可视化节点编辑器的第三方库。它基于 Qt 的 PyQt 或 PySide 绑定构建,提供了完整的框架来创建类似可视化编程工具(如 Blender 的节点编辑器或虚幻引擎的蓝图)的应用程序。

为了帮你快速了解,我将它的核心特性总结如下表:

特性说明
核心架构采用模型-视图分离的设计模式,将数据逻辑与图形界面解耦,便于维护和扩展。
核心组件包含节点端口连接线。节点是实现具体功能的单元,端口是输入输出接口,连接线定义数据流。
核心功能支持节点的增删、移动、连接编辑;内置撤销/重做栈;支持将整个节点图序列化保存到文件或从文件加载。
样式系统支持通过JSON灵活定义节点、连接线和画布的背景样式,可以实现动态主题切换。
数据流支持在节点之间定义类型安全的数据传递。库会处理连接的创建、断开以及数据更新的传播逻辑。

🛠️ 主要应用场景

这个库非常适合开发需要可视化编排流程的应用,常见的用途包括:

  • 数据处理与科学计算:构建可视化数据分析管道。
  • 图形与渲染管线:编辑材质、特效或复合渲染流程。
  • 游戏开发:创建角色的行为树、对话树或游戏逻辑。
  • 自动化与脚本编排:通过拖拽方式组合复杂的自动化任务。

💡 选择与替代方案

除了qtpynodeeditor,Python 生态中还有其他一些节点编辑器库,各有侧重:

  • NodeGraphQt:功能丰富,界面现代,在数字内容创作(DCC)工具领域较流行。
  • Ryven:专注于易用性和数据流可视化,适合快速原型设计。
  • python-node-editor:一个更基础、纯粹的示例项目,适合学习和深度定制。

总的来说,qtpynodeeditor是一个功能全面、基于成熟 Qt 框架的节点编辑器解决方案,尤其适合需要深度集成到 Qt 应用程序或对界面有较高定制需求的开发者。

如果你对具体的安装步骤、创建一个最简单的“Hello World”节点编辑器示例,或者如何自定义一个节点类型感兴趣,我可以为你提供更详细的介绍。

安装

pip install qtpynodeeditor

文档

https://klauer.github.io/qtpynodeeditor/getting_started.html
https://github.com/klauer/qtpynodeeditor?tab=readme-ov-file

示例【示例代码见github官方仓库】

Connection colors连线的颜色

图片

自定义样式

好像是一个计算器

基本概念

qtpynodeeditor 的基本概念 =“一张图 + 三种对象 + 两条规则”
(全部名称对应源码类名,一次记全):

  1. scene -》 view -》 Node、Port、Connection

  1. 一张图:FlowScene
  • 就是整个画布(节点 + 连线 + 序列化)
  • 负责:增删节点、保存 JSON、端口兼容性检查

  1. 三种核心对象
对象对应类作用
节点Node画布上的矩形,可拖、可删、可嵌 QWidget
端口Port节点两侧的小圆点,分 input/output
连线Connection贝塞尔曲线,连接两个 Port

  1. 两条规则
  • 同类型才能连Port.data_type字符串必须相等
  • 方向要对:output → input

  1. 你自己的代码只接触两个类
你要写的类作用
NodeDataModel定义节点:端口数、数据类型、算法、外观
DataModelRegistry注册表:把自定义模型交给场景

  1. 一句话记住

“场景管图,模型管节点,端口管连线,同类型才能连。”

简单案例

importsysfromqtpyimportQtWidgets,QtCoreimportqtpynodeeditorasne# 1. 创建一个最简单的节点模型classSimpleNode(ne.NodeDataModel):name="SimpleNode"# 节点名称caption="简单节点"# 节点显示标题# 端口设置:1个输入,1个输出num_ports={ne.PortType.input:0,ne.PortType.output:1}# 输出的数据类型data_type=ne.NodeDataType("simple1","输出")# 输出数据defout_data(self,port):returnne.NodeData()# 输入数据(什么都不做)defset_in_data(self,node_data,port):pass# 节点内部部件(空的)defembedded_widget(self):returnNone# 2. 创建第二个节点classOutputNode(ne.NodeDataModel):name="OutputNode"caption="输出节点"num_ports={ne.PortType.input:1,ne.PortType.output:0}# 端口的id和名称,只有id一样的才可以连接data_type=ne.NodeDataType("simple1","输入")defout_data(self,port):returnNonedefset_in_data(self,node_data,port):print("收到了数据!",node_data,port)QtWidgets.QMessageBox.information(None,# 父窗口(None表示没有父窗口)"提示",# 标题"操作成功完成!"# 消息内容)defembedded_widget(self):returnNone# 3. 主程序defmain():app=QtWidgets.QApplication(sys.argv)# 注册节点registry=ne.DataModelRegistry()registry.register_model(SimpleNode,category="示例1")registry.register_model(OutputNode,category="示例")# 创建场景和视图(画布)scene=ne.FlowScene(registry=registry)view=ne.FlowView(scene)# 这就是我们要塞进 layout 的 QWidget# 3. 纯 PyQt 窗口 + layoutwindow=QtWidgets.QWidget()window.setWindowTitle("节点编辑器嵌入 layout")layout=QtWidgets.QVBoxLayout(window)layout.addWidget(QtWidgets.QLabel("节点编辑器"),0,QtCore.Qt.AlignCenter)layout.addWidget(view)# ← 一行嵌入layout.addWidget(QtWidgets.QPushButton("节点编辑器"),0,QtCore.Qt.AlignCenter)# 4. 预置两个节点node1=scene.create_node(SimpleNode)node2=scene.create_node(OutputNode)node1.graphics_object.setPos(QtCore.QPointF(0,150))node2.graphics_object.setPos(QtCore.QPointF(300,150))# scene.create_connection(node1[ne.PortType.output][0],node2[ne.PortType.input][0], )window.resize(800,600)window.show()sys.exit(app.exec_())if__name__=='__main__':main()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 8:15:00

[Error] Refinement limit exceeded for auto-refinement.

[Error] Refinement limit exceeded for auto-refinement. 引言 正文 解决方法 1 解决方法 2 解决方法 3 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2025.12.09 \textrm{Created Time: 2025.12.09} Created Time: 2025.12.09

作者头像 李华
网站建设 2026/7/7 6:43:57

Step-Video-T2V技术深度解析:视频生成大模型的突破与行业影响

Step-Video-T2V技术深度解析:视频生成大模型的突破与行业影响 【免费下载链接】stepvideo-t2v-turbo 项目地址: https://ai.gitcode.com/StepFun/stepvideo-t2v-turbo 引言:文本驱动视频生成的技术跃迁 随着人工智能技术的飞速发展,…

作者头像 李华
网站建设 2026/7/7 15:30:10

突破性MD-ML融合框架:引领离子液体基凝胶电解质设计新范式

2025年11月26日,国际权威期刊《Journal of Industrial and Engineering Chemistry》发表了一项开创性研究,该研究构建了分子动力学(MD)与机器学习(ML)深度融合的智能设计平台,成功解决了离子液体…

作者头像 李华
网站建设 2026/7/7 8:32:38

为什么顶尖量子开发者都在用VSCode做远程调试?真相曝光

第一章:为什么顶尖量子开发者都在用VSCode做远程调试?在量子计算领域,开发环境的稳定性和调试效率直接影响算法实现的准确性与迭代速度。越来越多顶尖量子开发者选择 Visual Studio Code(VSCode)作为核心开发工具&…

作者头像 李华
网站建设 2026/7/6 20:42:58

Docker MCP 网关服务发现全攻略(从原理到实战的稀缺笔记)

第一章:Docker MCP 网关服务发现全解析在现代微服务架构中,Docker 容器化部署已成为主流实践。MCP(Microservice Control Plane)网关作为服务流量的统一入口,其服务发现机制直接影响系统的稳定性与可扩展性。Docker 环…

作者头像 李华
网站建设 2026/7/7 13:34:12

Arbess从基础到实践(6) - 集成GitLab搭建Vue.js项目自动化部署

Arbess 是一款开源免费的 CI/CD 工具,支持免费私有化部署,一键安装零配置,简洁易用等特点。本文将详细介绍如何安装Arbess、GitLab,并创建配置流水线实现 Vue.Js 项目构建并主机部署。 1、GitLab 安装与配置 本章节将介绍如何使…

作者头像 李华