# -*- coding: utf-8 -*- from view.ASubWindow import ASubWindow from model.network.Graph import (Node, Edge, Graph) from PyQt5.QtCore import ( Qt, QVariant, QAbstractTableModel, ) from PyQt5.QtWidgets import ( QTableView, ) class TableModel(QAbstractTableModel): def __init__(self, headers=[], rows=[]): super(QAbstractTableModel, self).__init__() self.rows = rows self.headers = headers def rowCount(self, parent): # How many rows are there? return len(self.rows) def columnCount(self, parent): # How many columns? return len(self.headers) def data(self, index, role): if role != Qt.ItemDataRole.DisplayRole: return QVariant() return self.rows[index.row()][self.headers[index.column()]] def headerData(self, section, orientation, role): if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal: return self.headers[section].capitalize() if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Vertical: return section return QVariant() class NetworkWindow(ASubWindow): def __init__(self, title="Network", parent=None): super(NetworkWindow, self).__init__(name=title, ui="Network", parent=parent) self.ui.setWindowTitle(title) self.graph = Graph() n1 = self.graph.add_node() n2 = self.graph.add_node() n3 = self.graph.add_node() self.nodes_table_model = TableModel( headers = ["name", "id"], rows = self.graph.nodes() ) self.find(QTableView, "tableView_nodes").setModel(self.nodes_table_model) self.graph.add_edge(n1, n2) self.graph.add_edge(n2, n3) self.reachs_table_model = TableModel( headers = ["name", "node1", "node2"], rows = self.graph.edges() ) self.find(QTableView, "tableView_reachs").setModel(self.reachs_table_model)