目标
实现剪贴板功能
实现
剪贴板完整代码
from collections import OrderedDict
from node_graphics_edge import QDMGraphicsEdge
from node_node import Node
from node_edge import Edge, EDGE_TYPE_BEZIER
DEBUG = False
class SceneClipboard():
def __init__(self,scene):
self.scene = scene
def serializeSelected(self, delete=False):
if DEBUG: print("---复制到剪贴板---")
sel_nodes, sel_edges, sel_sockets = [], [], {
}
for item in self.scene.grScene.selectedItems():
if hasattr(item,'node'):
sel_nodes.append(item.node.serialize())
for socket in (item.node.inputs + item.node.outputs):
sel_sockets[socket.id] = socket
elif isinstance(item, QDMGraphicsEdge):
sel_edges.append(item.edge)
if DEBUG:
print(" NODES\n ", sel_nodes)
print(" EDGES\n ", sel_edges)
print(" SOCKETS\n ", sel_sockets)
edges_to_remove = []
for edge in sel_edges:
if edge.start_socket.id in sel_sockets and edge.end_socket.id in sel_sockets:
pass
else:
if DEBUG: print("edge", edge, "它未连接")
edges_to_remove.append(edge)
for edge in edges_to_remove:
sel_edges.remove(edge)
edges_final = []
for edge in sel_edges:
edges_final.append(edge.serialize()