PyQtNode Editor 第三篇創建節點(節點的定義)

在這里插入圖片描述在 PyQtNode Editor 的開發之旅中,經過前兩篇博客對基礎環境搭建和核心類結構的探索,我們已經邁出了堅實的步伐。今天,我們將聚焦于node_scene文件,深入解析其中的代碼邏輯。這段代碼構建了Scene類,它如同整個節點編輯器的 “管理中樞”,承擔著組織和協調節點、邊等關鍵元素的重要職責,是推動編輯器功能運轉的核心力量。
首先創建一個node_scene.py文件
導入必要的模塊?

from node_graphics_scene import QDMGraphicsScene?

?
這里從自定義模塊 node_graphics_scene 中導入 QDMGraphicsScene 類。QDMGraphicsScene 類通常用于處理圖形場景的可視化相關操作,比如繪制背景、管理場景中的圖形元素顯示等。通過導入這個類,Scene 類可以利用它來實現節點和邊在界面上的展示,將邏輯數據與可視化效果進行關聯。?
定義 Scene 類?
?

class Scene:?

?
Scene 類用于管理節點編輯器中的節點和邊的邏輯數據,以及與圖形場景進行交互。它是整個節點編輯系統中數據管理和協調的核心部分,后續關于節點和邊的創建、刪除、存儲等操作都會圍繞這個類展開。?
類的初始化方法?
?

    def __init__(self):?self.nodes = []?self.edges = []?
?self.scene_width = 64000?self.scene_height = 64000?
?self.initUI()?

?
self.nodes = [] 和 self.edges = []:分別創建了兩個空列表,用于存儲節點和邊的對象。在后續的操作中,當創建新的節點或邊時,就會將它們添加到對應的列表中,方便進行統一管理和遍歷操作 。?
self.scene_width = 64000 和 self.scene_height = 64000:設置了圖形場景的寬度和高度。這兩個屬性定義了整個節點編輯區域的大小范圍,確定了節點和邊可以放置的空間。?
self.initUI():調用自定義的 initUI 方法,用于初始化與圖形場景相關的設置,將邏輯上的 Scene 類與可視化的圖形場景進行關聯和配置。?
初始化用戶界面方法?
?

    def initUI(self):?self.grScene = QDMGraphicsScene(self)?self.grScene.setGrScene(self.scene_width, self.scene_height)?
?

self.grScene = QDMGraphicsScene(self):創建了一個 QDMGraphicsScene 類的實例 grScene,并將當前的 Scene 類實例(self)作為參數傳遞進去。這樣做是為了在 QDMGraphicsScene 類中能夠獲取到與當前邏輯場景相關的信息,實現邏輯與可視化的交互。例如,QDMGraphicsScene 類可能需要根據 Scene 類中的數據來決定如何繪制節點和邊。?
self.grScene.setGrScene(self.scene_width, self.scene_height):調用 QDMGraphicsScene 實例的 setGrScene 方法,將之前設置的場景寬度和高度傳遞進去。這個方法可能會根據傳入的尺寸對圖形場景進行初始化配置,比如設置場景的邊界范圍,以便正確顯示節點和邊。?
節點和邊的添加方法?
?

    def addNode(self, node):?self.nodes.append(node)?
?def addEdge(self, edge):?self.edges.append(edge)?
?

addNode 方法:接收一個 node 參數,將傳入的節點對象添加到 self.nodes 列表中。當在節點編輯器中創建新的節點時,就會調用這個方法將新節點納入到場景的管理中,方便后續對節點進行查找、操作和存儲等處理。?
addEdge 方法:與 addNode 方法類似,接收一個 edge 參數,將傳入的邊對象添加到 self.edges 列表中。在節點之間建立連接關系時,新創建的邊就會通過這個方法添加到場景中,實現對邊的統一管理。?
節點和邊的刪除方法?
?

    def removeNode(self, node):?self.nodes.remove(node)?
?def removeEdge(self, edge):?self.edges.remove(edge)?

?
removeNode 方法:接收一個 node 參數,從 self.nodes 列表中移除指定的節點對象。當需要在節點編輯器中刪除某個節點時,調用這個方法可以將該節點從場景的管理中移除,同時后續可能還會觸發一些與該節點相關的清理操作,比如刪除與該節點連接的邊等。?
removeEdge 方法:接收一個 edge 參數,從 self.edges 列表中移除指定的邊對象。在斷開節點之間的連接時,就會使用這個方法將對應的邊從場景中刪除,確保場景中的數據與實際的節點連接狀態一致。
完整的node_scene文件:

# 從自定義模塊node_graphics_scene中導入QDMGraphicsScene類。
# QDMGraphicsScene類通常用于處理圖形場景的可視化相關操作,
# 例如繪制場景背景、管理場景中圖形元素的顯示等,為后續將邏輯數據可視化做準備
from node_graphics_scene import QDMGraphicsScene# 定義Scene類,該類用于管理節點編輯器中的節點和邊的邏輯數據,
# 以及與圖形場景進行交互,是整個節點編輯系統數據管理和協調的核心部分
class Scene:# 類的初始化方法,在創建Scene類的實例時自動調用,用于初始化對象的屬性def __init__(self):# 創建一個空列表,用于存儲節點對象。后續創建的節點都將添加到這個列表中,# 方便對節點進行統一管理,如遍歷、查找、操作等self.nodes = []# 創建一個空列表,用于存儲邊對象。與節點列表類似,# 所有創建的邊都會存放在這里,便于管理邊的相關操作self.edges = []# 設置圖形場景的寬度為64000,這個值定義了節點編輯區域在水平方向上的大小范圍self.scene_width = 64000# 設置圖形場景的高度為64000,確定了節點編輯區域在垂直方向上的大小范圍self.scene_height = 64000# 調用initUI方法,用于初始化與圖形場景相關的設置,# 建立邏輯場景與可視化圖形場景之間的聯系self.initUI()# 初始化用戶界面的方法,主要負責創建圖形場景實例并進行相關配置def initUI(self):# 創建QDMGraphicsScene類的實例grScene,并將當前Scene類的實例self作為參數傳入。# 這樣做可以使QDMGraphicsScene類獲取到與當前邏輯場景相關的信息,# 實現邏輯場景與可視化圖形場景之間的交互self.grScene = QDMGraphicsScene(self)# 調用grScene的setGrScene方法,將之前設置的場景寬度和高度傳入。# 該方法會根據傳入的尺寸對圖形場景進行初始化配置,# 比如設置場景的邊界范圍,以確保節點和邊能在正確的區域內顯示self.grScene.setGrScene(self.scene_width, self.scene_height)# 向場景中添加節點的方法,接收一個node參數,代表要添加的節點對象def addNode(self, node):# 將傳入的節點對象添加到self.nodes列表中,# 從而將新節點納入到Scene類的管理體系中self.nodes.append(node)# 向場景中添加邊的方法,接收一個edge參數,即要添加的邊對象def addEdge(self, edge):# 將傳入的邊對象添加到self.edges列表中,# 實現對新創建邊的統一管理self.edges.append(edge)# 從場景中移除節點的方法,接收一個node參數,指定要移除的節點對象def removeNode(self, node):# 從self.nodes列表中移除指定的節點對象,# 在實際應用中,刪除節點可能還會引發與該節點相關的其他清理操作,# 以保證數據的一致性和準確性self.nodes.remove(node)# 從場景中移除邊的方法,接收一個edge參數,用于指定要移除的邊對象def removeEdge(self, edge):# 從self.edges列表中移除指定的邊對象,# 確保場景中節點之間的連接關系與實際操作保持一致self.edges.remove(edge)

在node_graphics_scene.py文件中:
初始化原來函數:

class QDMGraphicsScene(QGraphicsScene):def __init__(self, parent=None):super().__init__(parent)

更改為:

class QDMGraphicsScene(QGraphicsScene):def __init__(self, scene, parent=None):super().__init__(parent)self.scene = scene

并且增加一個函數:

 def setGrScene(self, width, height):self.setSceneRect(-width // 2, -height // 2, width, height)

并且刪除原來代碼中:

self.scene_width, self.scene_height = 64000, 64000
self.setSceneRect(-self.scene_width//2, -self.scene_height//2, self.scene_width, self.scene_height)

在窗口的node_editor_wnd.py文件中:
首先調用

from node_scene import Scene

將原來的代碼中的:

self.grScene = QDMGraphicsScene()

更改為:

    self.scene = Scene()self.grScene = self.scene.grScene

通過以上的步驟:實現了Scene函數的分離。

節點類

創建一個node_graphics_node.py

# 從PyQt5的QtWidgets模塊導入所有的類和函數,該模塊包含各種用于創建用戶界面的組件,如按鈕、布局、視圖等
from PyQt5.QtWidgets import *
# 從PyQt5的QtCore模塊導入所有的類和函數,此模塊提供了核心功能,包括信號與槽機制、事件循環、定時器等
from PyQt5

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86547.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過docker安裝nginx服務

nginx配置文件 https://gitee.com/Cairo-SR8/nginx-configuration.git一、安裝nginx 1.1 拉去ARM鏡像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_nginx:latest1.2 拉去x86鏡像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/…

盲法在臨床試驗中的應用與挑戰

一、盲法分級與科學價值 1.1 開放標簽 1.1.1 受盲對象 無隱藏。 1.1.2 適用場景 外科手術、器械試驗等無法偽裝的操作。 1.1.3 偏倚控制目標 僅客觀終點(生存率、實驗室指標)。 1.2 單盲 1.2.1 受盲對象 患者。 1.2.2 適用場景 患者報告結局(PRO)為主的試驗(如…

VNware啟動虛擬機報錯:虛擬化性能計數器需要版本為 3 或以上的架構性能監控。

Vmware版本:17.5 結論: 【編輯虛擬機設置-硬件-處理器-虛化計數器】沒勾就勾上,勾了就不勾保存,然后重新打勾 備注:不知道是不是顯示問題,之前勾著的時候報錯。取消報錯,再勾上報錯能正常啟動虛…

微機系統 - 第7章 -可編程接口芯片

可編程并行輸入/輸出接口芯片 8255A -1:結構 8255A為40引腳、雙列直插封裝。 內部結構由數據端口、組控制電路、數據總線緩沖器、讀/寫控制邏輯四部分組成。 數據總線緩沖器:三態8位雙向緩沖器,D7-D0同系統數據總線相連。CPU通過執行輸入/輸出指令來實…

解析云計算虛擬化基石:KVM、QEMU與Libvirt的協同

在云計算和容器化大行其道的今天,傳統虛擬化技術仍是企業IT架構的核心支柱。理解KVM、QEMU和Libvirt的關系,是掌握現代虛擬化技術的關鍵一步。 一、虛擬化技術演進:從軟件模擬到硬件加速的進化之路 虛擬化技術通過在單臺物理服務器上創建多個…

Mac mini 跑 DeepSeek R1 及 QwQ-32B模型實測報告

測試對象:2025 款 Mac mini(M4 / M4 Pro 芯片) 測試模型:DeepSeek-R1(14B/32B)、QwQ-32B(原版/量化版) 測試目標:硬件性能適配性、推理速度、內存占用及優化方案 一、Mac…

github常用插件

一,文檔輔助閱讀系列:自動化wiki處理 1,deepwiki https://deepwiki.com/ 將我們看不懂的官方code文檔轉換為wiki,更加便于理解。 其實能夠翻閱的倉庫很有限,比如說: 但是有很多倉庫并沒有index&#xff…

洛谷P11963 [GESP202503 六級] 環線-普及/提高-

題目描述 小 A 喜歡坐地鐵。地鐵環線有 n n n 個車站&#xff0c;依次以 1 , 2 , ? , n 1,2,\cdots,n 1,2,?,n 標號。車站 i ( 1 ≤ i < n ) i\ (1\leq i<n) i (1≤i<n) 的下一個車站是車站 i 1 i1 i1。特殊地&#xff0c;車站 n n n 的下一個車站是車站 1 …

大網絡辦公區的二層生成樹優化問題

辦公區有華為和思科交換機&#xff0c;此次改造&#xff0c;在辦公火墻上、下聯&#xff0c;做3層IP地址互聯&#xff0c;可以讓大核心不參與辦公區的STP網絡收斂&#xff0c;就不會因為下面辦公區的交換機stp收斂問題導致&#xff0c;核心連接的其他區域網絡出現動蕩&#xff…

重點解析(軟件工程)

一. 概述 什么是軟件、軟件危機、軟件工程 軟件是可執行的指令&#xff08;程序&#xff09;、操作信息的數據以及描述程序操作和使用的文檔的集合。 軟件危機指軟件開發速度跟不上需求增長&#xff0c;導致設計拙劣、維護困難&#xff0c;可能造成經濟損失或災難。 軟件工程是…

Jina-Embeddings-V4:多模態向量模型的革命性突破與實戰指南

當Jina-Embeddings-V4帶著38億參數和多模態能力登場時&#xff0c;它就像向量模型界的"變形金剛"——不僅能處理30語言的文本&#xff0c;還能把圖像、表格甚至混合排版文檔統統"吞"進同一個語義空間。傳統方案如CLIP需要分別處理圖像和文本再強行對齊&…

數據結構進階 - 第四,五章 串、數組和廣義表

數據結構進階 - 串、數組和廣義表 第四章 串&#xff08;String&#xff09; 4.1 串的基本概念 4.1.1 串的定義 串是受限的線性表&#xff1a;組成串的元素只能為字符串的特點&#xff1a; 操作位置受限元素類型受限&#xff08;只能是字符&#xff09;是線性表的推廣和受限…

【力扣 困難 C】940. 不同的子序列 II

目錄 題目 解法一&#xff1a;動態規劃 題目 解法一&#xff1a;動態規劃 int distinctSubseqII(char* s) {const int mod 1000000007;int dp[26] {0};int cnt 1;int len strlen(s);for (int i 0; i < len; i) {int new (cnt - dp[s[i] - a] mod) % mod;cnt (cnt…

【用戶權限】chmod的簡單使用(一)

一、用戶和權限的基本概念 用戶是 Linux 系統工作中重要的一環&#xff0c;用戶管理包括用戶與組管理。在 Linux 系統中&#xff0c;不論是由本機或是遠程登錄系統&#xff0c;每個系統都必須擁有一個賬號&#xff0c;并且對于不同的系統資源擁有不同的使用權限。在Linux中&am…

Electron桌面程序初體驗

Electron 是網頁應用 (web apps) 的一個原生包裝層&#xff0c;在 Node.js 環境中運行。所以需要開發者對 Node.js 和前端 Web 開發有一定地了解。下面我們就來初始化一個項目&#xff0c;試試看。 提示&#xff1a;本人使用的是npm命令&#xff0c;yarn命令也是可以的 1.初…

生信軟件47 - 超低測序深度的全基因組測序cfDNA腫瘤分數估計工具ichorCNA

1. ichorCNA簡介 ichorCNA是一種用于估計來自超低測序深度的全基因組測序&#xff08;ULP-WGS&#xff0c;0.1x覆蓋率&#xff09;的cfDNA中腫瘤分數的工具。ichorCNA使用概率模型&#xff0c;應用隱馬爾可夫模型&#xff08;HMM&#xff09;&#xff0c;以同時分割基因組&…

Python 解壓縮(支持.zip/.rar/.7z格式)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 Python 解壓縮&#xff08;支持.zip/.rar/.7…

龍虎榜——20250627

上證指數放量收陰線&#xff0c;回踩5天均線&#xff0c;但個股總體漲多跌少。 深證指數縮量收十字星&#xff0c;在前期壓力位震蕩。 2025年6月27日龍虎榜行業方向分析 1. 金融科技&#xff08;跨境支付數字安全&#xff09; 代表標的&#xff1a;吉大正元&#xff08;跨境認…

三步實現B站緩存視頻轉MP4格式

本期我們來實現如何將B站緩存的視頻轉成MP4格式&#xff0c;直接在本地播放。 首先我們在Bilibili客戶端緩存一個視頻&#xff0c;保存的文件如下&#xff1a; 這里有兩個m4s文件&#xff0c;大的哪個是視頻文件&#xff0c;小的是音頻文件&#xff0c;這里我們用視頻播放軟件…

MySQL 與 Oracle 事務:深度解析與全面對比

在數據庫管理領域&#xff0c;事務是確保數據一致性和完整性的核心機制&#xff0c;它允許用戶將一系列操作視為一個不可分割的整體&#xff0c;要么全部成功執行&#xff0c;要么全部回滾。MySQL 和 Oracle 作為兩款廣泛使用的關系型數據庫管理系統&#xff0c;它們在事務處理…