pyqt5
文章平均质量分 70
mahuatengmmp
本账号已不再使用,所以发私信和评论是没用的
展开
-
[Pyqt-Node-Editor]Nodeeditor文档--Coding Standards(编码标准)
Coding Standards在整个 nodeeditor 包中使用以下规则和指南:File naming guidelines(文件命名指南)nodeeditor 包中的文件以 node_ 开头包含图形表示(PyQt5 覆盖类)的文件以 node_graphics_ 开头窗口/小部件的文件以 node_editor_ 开头Coding guidelines(编码指南)方法使用驼峰命名法变量/属性使用 Snake 大小写命名构造函数__init__始终包含整个类的所有类变量。这对新原创 2021-08-23 14:15:49 · 794 阅读 · 0 评论 -
[Pyqt-Node-Editor]Nodeeditor文档--Evaluation(评估)
EvaluationTL;DR: 评估系统使用 eval()和 evalChildren()。eval()方法应该被您自己的实现覆盖。评价逻辑使用标志用于标记所述节点是脏和/或无效的。Evaluation Functions有两种主要的评估方法:eval()evalChildren()这些功能是相互排斥的。这意味着,evalChildren确实不eval当前节点,但只有当前的孩子节点。默认情况下, 的实现eval()是“空”并返回 0。然而,这似乎是合乎逻辑的,该 eval(如果成功)将N原创 2021-08-23 14:05:51 · 449 阅读 · 0 评论 -
[Pyqt-Node-Editor]Nodeeditor文档--Serialization(序列化)
Serialization所有可序列化的类都派生自Serializable类。 Serializable确实为我们的类创建了常用的参数。在我们的例子中,它只是id 属性。Serializable定义了两个应该在子类中重写的方法:serialize()deserialize()根据编码标准,我们将这两个函数放在类源代码的底部。为了包含我们使用的所有数据,我们需要使用 OrderedDict 来替代传统python词典. 主要是因为我们要保留文件中序列化参数的顺序。派生的子类Serializa原创 2021-08-23 13:45:20 · 331 阅读 · 0 评论 -
[Pyqt-Node-Editor]Nodeeditor文档--Event system(事件系统)
Event systemNodeeditor 使用自己的事件(并尽量避免使用pyqtSignal)来处理场景内发生的逻辑。如果一个类确实处理了一些事件,它们通常会在本文档的页面顶部进行描述。任何事件都可以订阅,注册回调的方法可以被调用:add<EventName>Listener(callback)具体可以看下源代码您可以随时注册这些活动中的任何一个。Events used in NodeEditor:SceneHas Been Modified当Scene中发生改变时It原创 2021-08-23 13:40:21 · 358 阅读 · 0 评论 -
[Pyqt-Node-Editor]Nodeeditor文档--node_node
Node_node模块包含用于表示Node 的NodeEditor 类的模块。class nodeeditor.node_node.Node(scene: Scene, title: str = 'Undefined Node', inputs: list = [], outputs: list = [])Bases: nodeeditor.node_serializable.SerializableClass representing Node in the Scene.Parameters(原创 2021-08-23 13:01:03 · 843 阅读 · 0 评论 -
[PyQt5-Node-Editor]如何获取节点编辑器代码,以及帮助文档
介绍如何获取节点编辑器链接Tutorial Series WebGitLab repositoryDocumentationFAQ为原作者捐赠Discord获取文档他的文档不全(也没有更新),需要自己git他的仓库,然后对doc里的build.py运行,进行文档编译成HTML这样文档才是全的先需要安装:pip install sphinx sphinx_intl sphinx_rtd_theme recommonmark之后在这个目录下运行build.py即可得到文件bu原创 2021-08-03 17:04:11 · 500 阅读 · 0 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(25)——标题显示文件修改状态
1原创 2021-08-02 14:06:24 · 855 阅读 · 0 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(24)——修BUG
BUG导航修复各种BUGEdge在多次复制后可能出现消失的显示BUG切割线崩溃BUG当连线连接自己时会崩溃修复各种BUGEdge在多次复制后可能出现消失的显示BUG在缩小放大后Edge又能正常显示需要在node_graphics_edge.py里添加如下代码,让edge能够一直刷新(可能) def boundingRect(self): return self.shape().boundingRect() def shape(self): re原创 2021-07-25 18:50:08 · 357 阅读 · 0 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(23)——实现剪贴板功能
目标实现剪贴板功能实现剪贴板完整代码from collections import OrderedDictfrom node_graphics_edge import QDMGraphicsEdgefrom node_node import Nodefrom node_edge import Edge, EDGE_TYPE_BEZIERDEBUG = Falseclass SceneClipboard(): def __init__(self,scene):原创 2021-07-25 15:42:09 · 358 阅读 · 3 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(22)——如何实现剪贴板操作
导航目标实现该复制什么如何复制序列化内容建立新类,实现剪贴板功能Edit内添加剪贴板功能目标设置复制粘贴剪切的选项复制Node,edge等内容粘贴到Scene中实现该复制什么如果我们要对node和edge进行复制,那么我们需要复制的是什么东西是复制对象吗,当然不是在前面的内容就以及给了答案,我们将scene里的内容进行了序列化保存,以及反序列化解压读取那么,答案就显然易见了,我们需要复制的是序列化内容如何复制序列化内容 def deserialize(self, data,原创 2021-07-25 13:02:02 · 313 阅读 · 0 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(21)——实现主窗口
导航目标实现将之前的NodeEditWind改为NodeEditWidget主界面代码详解建立一个菜单栏功能范本将View的按键功能移植到主界面事实坐标显示目标本章节里将真正的重点实现主界面的建立,以及功能的实现,将之前View上的按键功能移至主界面在主界面中心放置View,下面添加statusBar,上面添加菜单栏,并且statusBar将实现当前鼠标在场景的位置显示,以及保存成功等消息的显示实现将之前的NodeEditWind改为NodeEditWidgetNodeEditWind将不再担原创 2021-07-25 10:03:03 · 1080 阅读 · 2 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(20)——撤销与重做(三)历史戳
目标本章将实现以下功能当鼠标选中Node或者Edge时,将记录历史当Edge或者Node被删除时,记录历史当Node被移动的时候,记录历史crlt + z为undoshift + crlt + z为redo实现本章主角–历史戳的建立为了实现能够保存历史,redo,undo,就必须建立一个东西来负责储存历史,redo和undo去读取已经存储的历史,即我们需要建立一个历史戳也就是createHistoryStamp负责处理并返回的东西def createHistoryStamp(se原创 2021-07-24 15:57:25 · 479 阅读 · 0 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(19)——撤销与重做(二)历史堆栈
DEBUG = Trueclass SceneHistory(): def __init__(self,scene): self.scene = scene self.history_stack = [] self.history_current_step = -1 self.history_limit = 8 def undo(self): if DEBUG: print('un原创 2021-07-23 20:40:46 · 398 阅读 · 2 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(18)——撤销与重做(一)介绍
如何做我想用一张图来简单明了的说明首先建立一条历史堆栈,最大长度为8(0-7)每次操作都会储存到历史堆栈里面,想要找到对应的历史,可以通过指针p来寻址,找到对应历史undo会使指针位置往回偏移,在p>=0的条件下redo会使指针向前偏移,在当前指针位置小于历史堆栈总长的条件下...原创 2021-07-18 17:32:03 · 424 阅读 · 0 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(17)——解码,读取Scene
def deserialize(self, data, hashmap={}): print('解码数据', data) self.clear() hashmap = {} #创建nodes for node_data in data['nodes']: Node(self).deserialize(node_data, hashmap) #创建edges ...原创 2021-07-18 16:02:46 · 552 阅读 · 1 评论 -
[PyQt5-Node-Editor][进阶篇]使用Pyqt5制作节点编辑器(16)——序列化,保存Scene
目标能够将scene数据保存为一个JSON文件,方便读取和保存{ "id": 2586028185080, "scene_width": 64000, "scene_height": 64000, "node": [ { "id": 2586029654760, "title": "这是一个节点", "pos_x": -350.0, "pos_y": -250.原创 2021-07-18 13:11:26 · 697 阅读 · 1 评论 -
[PyQt5-Node-Editor][基础篇](完)从零开始使用Pyqt5制作节点编辑器(15)——切割线
导航目标实现按下鼠标左键绘制切割线鼠标移动切除方法目标按住鼠标左键和crtl键进入切割模式,edge在被切割的路径上就会被切除实现定义一个新模式,切割模式MODE_EDGE_CUT = 3按下鼠标左键由于需要按下鼠标左键和crtl,那么这个这个模式肯定是在view里的leftMouseButtonPress(self, event)里判断并执行则在leftMouseButtonPress(self, event)新增代码if item is None: if event.mod原创 2021-07-15 21:43:14 · 961 阅读 · 6 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(14)——实现Item删除
代码写得深,BUG永相存导航目标实现修复BUG建立delete键触发事件node的remove方法新的BUG再次修复BUG又一个新的BUG解决BUG的方法目标选中单个Node后,按delete键,会删除对应node以及他所连接的线,不仅仅是显示效果上删除了,在scene列表里也删除掉了多选也能进行删除单独的edge也能删除实现修复BUG在之前的程序里,有个非常致命的BUG,就是对一个socket连续点击两次会导致socket连接自己,最终导致程序崩溃修复这个BUG很简单只需要在原创 2021-07-15 15:37:56 · 692 阅读 · 2 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(13)——框选与多选
导航目标按住shift键可以进行多选在背景上按住左键可以框选shift+框选也能实现多选接力实现将setStyleSheet功能从NODE移动到主页增加shift多选功能显示BUG修复目标按住shift键可以进行多选在背景上按住左键可以框选shift+框选也能实现多选接力实现将setStyleSheet功能从NODE移动到主页为了方便view里面的控件样式设计,需要将NODE移动到main程序里执行class NodeEditWind(QMainWindow,Ui_MainWindow原创 2021-07-14 23:03:57 · 1223 阅读 · 0 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(12)——如何创建可拖拽式连线
导航目标实现增加删除Edge获取通过socket获取对应的edge抓取第一个点抓取过程连线动画点击或拖拽到第二个点结果目标完成各节点间的连线实现由于涉及到要创建新的edge和删除edge,那么就得编写与之相关的代码。增加删除Edge这就需要调用node_scene.py里面的方法,来实现edge的增加和删除,于是需要在node_edge.py里添加如下代码self.scene.addEdge(self)获取通过socket获取对应的edge首先就需要让Item_socket中有s原创 2021-07-11 20:55:33 · 1435 阅读 · 0 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(11)——如何创建可拖拽式连线
导航目标实现实现途径鼠标左键拖拽socket到另外一个socket上完成连线鼠标左键点击第一个节点,再点击第二个节点,完成连线鼠标点击第一个节点,或者拖拽第一个节点,之后点击任意处取消连线如何识别点击到的是socket两种模式鼠标左键按下的事件函数目标使程序能够准确识别以下三个动作鼠标左键拖拽socket到另外一个socket上完成连线鼠标左键点击第一个节点,再点击第二个节点,完成连线鼠标点击第一个节点,或者拖拽第一个节点,之后点击任意处取消连线实现实现途径由于要在View中进行操作,所原创 2021-07-10 18:33:41 · 1169 阅读 · 1 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(10)——完成Edge放置,并且增加socket样式
导航目标Edge能够完全跟着Node走,并且socket有多种样式或者说种类实现使Edge跟着socket走,也就是跟着Node走多样式socket考试周,暂时不更目标Edge能够完全跟着Node走,并且socket有多种样式或者说种类其中不同颜色的socket就是不同样式的socket,用Node(scene, title=“Undefined Node”, inputs=[], outputs=[])中的inputs和outputs表示实现使Edge跟着socket走,也就是跟着No原创 2021-06-27 21:52:25 · 1283 阅读 · 2 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(9)——放置Edge(二)
导航目标使线连接到对应socket上实现为edge添加删除功能更新edge头和尾的坐标位置目标使线连接到对应socket上实现为edge添加删除功能连接线的改动在以后的程序编写里肯定是功能最多以及最复杂的,所以提前增加edge的删除功能首先在node_socket内添加新属性self.edge = None,来确定该socket是否进行连接并且增加两个新方法 def getSocketPosition(self): return self.node.getSocket原创 2021-06-27 20:07:23 · 803 阅读 · 1 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(8)——放置Edge(一)
导航目标实现Main程序改动node_node改动建立Edge类建立Edge目标绘制出直线和贝塞尔曲线的连接线,并且连接线会有选择反馈实现Main程序改动将所有的添加Item的调用都交给方法addNode处理 def addNode(self): node1 = Node(self.scene,"这是一个节点",inputs = [1,2,3],outputs = [1]) node2 = Node(self.scene, "这是第二个节点", inp原创 2021-06-27 15:13:37 · 1109 阅读 · 2 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(7)——写个socket(插口)
导航目标实现定义节点(改动)定义Socket类绘制socket声明socket放置socket目标在声明一个Node的时候,可以指定有几个输入socket和几个输出socket实现定义节点(改动)node = Node(self.scene,"这是一个节点",inputs = [1,2,3],outputs = [1])引入新的输入参数来指定socket的数目每个socket都是一个Socket类定义Socket类node_socket.pyfrom node_graphics_原创 2021-06-26 21:02:53 · 1152 阅读 · 3 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(6)——为节点添加内容,以及Styles
导航为NODE里添加widget自定义一个widget将widget添加到node里面QSS美化导入QSS文件编辑QSS文件最终效果为了方便向node里添加控件,我们需要向node里添加widget,也就是content为NODE里添加widget自定义一个widgetfrom PyQt5.QtWidgets import *class QDMNodeContentWidget(QWidget): def __init__(self, parent=None): sup原创 2021-06-26 18:45:56 · 1090 阅读 · 1 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(5)——来制作第一个节点吧
111原创 2021-06-26 14:50:37 · 2101 阅读 · 4 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(4)——结构规划,建设场景
导航接下来应该做什么QT结构与节点编辑器Node编辑器需要的功能对于代码上的改动自定义Scene尺寸定义专门的node方法运行上的逻辑更改当前各文件代码接下来应该做什么QT结构与节点编辑器图片来源于原作者的教程首先来讲这张图的左边,左边为QT里关于Graphics View的框架中各类的关系,这与我们即将设计的节点编辑器有关Item是设置在Scene中的Scene想要显示出来,需要借助View最后View是一个Widget,可以放在QT的界面里这是一条分界线———————————————原创 2021-06-23 22:36:31 · 3012 阅读 · 3 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(3)——拖拽场景和缩放场景
导航拖拽实现中键拖拽思路重写鼠标按下和放开的函数中键按下缩放缩放功能需求定义缩放参数重写滚轮事件函数设置以鼠标为中心缩放拖拽实现中键拖拽思路我的目标是实现按下鼠标中间实现拖拽,当鼠标中键按下即可拖拽,中键松开回归正常,效果如下图由于要实现拖拽功能,那么我就需要对鼠标的按下和释放的事件做出处理,于是我需要对:def mousePressEvent(self, event): passdef mouseReleaseEvent(self, event): pass这两个函数进行重写,来原创 2021-06-23 20:45:15 · 1368 阅读 · 0 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(2)——为场景中添加一些物品吧
1.QGraphicsItem介绍QGraphicsItem 类是 QGraphicsScene 中所有 item 的基类。它提供了一个轻量级的基础,用于编写自定义 item。其中包括:定义 item 的几何形状、碰撞检测、绘制实现、以及通过其事件处理程序进行 item 的交互,QGraphicsItem 是 Qt之图形视图框架 的一部分。Qt 已经为我们提供了一组常见 item。它们是:List itemQGraphicsSimpleTextItem:提供了一个简单的文本标签项QGra原创 2021-06-20 18:49:04 · 1740 阅读 · 1 评论 -
[PyQt5-Node-Editor][基础篇]从零开始使用Pyqt5制作节点编辑器(1)——绘制网格背景
前排提醒看本系列内容需要你对QGraphicsView和QGraphicsScene和QGraphicsItem有一定了解没了解可以看下别的博主博客或者官方文档了解一下在这里我就简单的打个比方QGraphicsScene:盒子以及盒子里的内容QGraphicsView:展示盒子内容的方式(各种滤镜,通过它可以将Scene显示到layout)QGraphicsItem:盒子里的物品(塞到盒子里去)1.建立一个Scene为了拥有更直观的显示效果,我打算将Scene设置为一个网格背景的Scene,原创 2021-06-20 17:53:53 · 3683 阅读 · 3 评论 -
[PyQt5-Node-Editor][前言]从零开始使用Pyqt5制作节点编辑器(0)
0x01 为什么要做这个系列1. 导师布置任务的学习笔记对就是这么简单,不过是导师的任务罢了,一边学习,一边做笔记(学节点编辑器,弄拖拽式编程)2.案例稀缺对于开源节点编辑器的项目目前我就只找到了两个,一个是vue-node-editor,一个是基于pyqt的节点编辑器,这两个项目的作者都没给出完整的接口和文档,于是我决定对后者进行研究和学习,(跟着作者一点一点的码代码)…作者全部课程:https://www.blenderfreak.com/tutorials/node-editor-tutor原创 2021-06-20 15:56:53 · 2282 阅读 · 1 评论 -
[PYQT5]做出精美界面 窗体自定义阴影 Render Shadow--part2[QGraphicsDropShadowEffect]
应用场景做了几次纯色无边框界面的设计后发现,纯色无边框有个很大的问题,就是在白色背景上显示效果不是特别好,遁入白色,无影无踪我想了两个解决方案,一种是加个边框,一种是加个窗体阴影,加边框太丑了,直接pass掉,那么剩下的就是添加阴影,QT内置的添加阴影又由于改了无边框和背景透明,导致阴影不能够显示完全,于是只能另辟蹊径。解决方案(这里widget叫容器,我有时口误把他叫做窗体)查阅网上,添加阴影的方法五花八门,有Qpaint手绘党(代码太复杂),有PS贴图党(将阴影图片贴在边框上)(代码复杂,原创 2021-02-09 18:09:45 · 2786 阅读 · 3 评论 -
[PYQT5]如何做出精美界面,让你的软件高n个档次,QSS实例教程--不定时更新--part1[QLineEdit]
本人只是把平时做界面的一些小例子列举出来,没什么特别高端的操作,希望使你的界面更加美观CSS大佬的不要喷,我只是个刚学点QSS的萌新 QAQ原创 2020-04-26 16:16:46 · 31192 阅读 · 11 评论