from PyQt5.QtWidgets import QWidget, QTextEdit, QTabWidget, QSplitter, QApplication, QVBoxLayout import sys from frame.ReferView import MemoryNode, RelateReferView, EmptyNode, MemorySkin from typing import List from PyQt5.Qt import Qt class MergeDestination: def __init__(self, story_name:str, prev: MemoryNode, curr: MemoryNode): self.prev_node = prev self.curr_node = curr self.storyline_name = story_name pass class LinesMergeView(QWidget, MemorySkin): def __init__(self, fdefs: MergeDestination, refdefs: List[MergeDestination], parent): QWidget.__init__(self, parent) self.define_line = fdefs self.refers_line = refdefs layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) splitter = QSplitter(Qt.Orientation.Horizontal, self) layout.addWidget(splitter) self.tabs_con: QTabWidget = QTabWidget(self) self.tabs_con.setTabPosition(QTabWidget.TabPosition.West) splitter.addWidget(self.tabs_con) self.define_prev: QTextEdit = QTextEdit(self) self.define_prev.setReadOnly(True) self.tabs_con.addTab(self.define_prev, fdefs.storyline_name) self.refers_views: List[RelateReferView] = [] for node in refdefs: refer_view = RelateReferView(node.prev_node, node.curr_node, self) self.tabs_con.addTab(refer_view, node.storyline_name) self.refers_views.append(refer_view) pass self.mut_enter = QTextEdit(self) splitter.addWidget(self.mut_enter) pass def load_from_mem(self) -> None: self.define_prev.setText(self.define_line.prev_node.get_from_memory()) self.mut_enter.setText(self.define_line.curr_node.get_from_memory()) for v in self.refers_views: v.load_from_mem() pass pass def save_to_mem(self): self.define_line.curr_node.set_to_memory(self.mut_enter.toPlainText()) for v in self.refers_views: v.save_to_mem() pass pass if __name__ == "__main__": app = QApplication(sys.argv) defx = MergeDestination("page0", EmptyNode(), EmptyNode()) refx0 = MergeDestination("pagex1", EmptyNode(), EmptyNode()) view = LinesMergeView(defx, [refx0], None) view.show() app.exec()