83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
from PyQt5.QtWidgets import QTextEdit, QWidget, QSplitter, QVBoxLayout, QApplication
|
|
from PyQt5.Qt import Qt
|
|
from abc import abstractmethod
|
|
from typing import List, Protocol
|
|
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()
|