from PyQt5.QtWidgets import QTextEdit, QWidget, QSplitter, QVBoxLayout, QApplication from PyQt5.Qt import Qt from abc import abstractmethod from typing import List import sys class MemoryNode: @abstractmethod def get_from_memory(self) -> str: raise NotImplementedError("get_from_memory") @abstractmethod def set_to_memory(self, content: str): raise NotImplementedError("set_to_memmory") class MemorySkin: @abstractmethod def load_from_mem(self) -> None: raise NotImplementedError("load_from_mem") @abstractmethod def save_to_mem(self): raise NotImplementedError("save_to_mem") class RelateReferView(QWidget, MemorySkin): def __init__(self, prev_frefs: MemoryNode, curr_frefs: MemoryNode, parent): """ 构建引用关系视图 :param prev_frefs: 上游节点 :param curr_frefs: 当前引用节点 """ QWidget.__init__(self, parent) self.prev_fragment = prev_frefs self.curr_fragment = curr_frefs layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) splitter_container = QSplitter(Qt.Orientation.Vertical, self) layout.addWidget(splitter_container) self.immut_view: QTextEdit = QTextEdit(self) self.immut_view.setReadOnly(True) self.mut_refers: QTextEdit = QTextEdit(self) splitter_container.addWidget(self.immut_view) splitter_container.addWidget(self.mut_refers) pass def load_from_mem(self): """ 载入内存内容到视图 """ self.immut_view.setText(self.prev_fragment.get_from_memory()) self.mut_refers.setText(self.curr_fragment.get_from_memory()) pass def save_to_mem(self): """ 保存视图内容到内存 """ self.prev_fragment.set_to_memory(self.immut_view.toPlainText()) self.curr_fragment.set_to_memory(self.mut_refers.toPlainText()) pass class EmptyNode(MemoryNode): def get_from_memory(self) -> str: return "站位视图内容" def set_to_memory(self, content: str): pass if __name__ == "__main__": app = QApplication(sys.argv) view = RelateReferView(EmptyNode(), EmptyNode(), None) view.show() app.exec()