>source

PYQT5 응용 프로그램에 표시되는 Networkx Directed 그래프가 완벽하게 작동합니다. 나는 이제 몇 가지 편의를 위해 가장자리에 레이블을 추가하려고하고 있지만, 그들을 만들 수 없을 수는 없습니다.

아래의 문제를 복제하는 더미 응용 프로그램입니다.

import sys
from PyQt5 import QtCore, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.pyplot import Figure
import networkx as nx
class data_tab(QtWidgets.QWidget):
    def __init__(self, parent, title):
        QtWidgets.QWidget.__init__(self, parent)
        self.data_tab_glayout= QtWidgets.QGridLayout(self)
        self.canvas= FigureCanvas(Figure(figsize=(5, 3)))
        self.canvas_vlayout= QtWidgets.QVBoxLayout(self.canvas)
        self.data_tab_glayout.addWidget(self.canvas, 0, 0, 2, 1)
        self.axe= self.canvas.figure.add_subplot(111)
        self.canvas.figure.subplots_adjust(left=0.025, top=0.965, bottom=0.040, right=0.975)
        # add the tab to the parent
        parent.addTab(self, "")
        # set text name
        parent.setTabText(parent.indexOf(self), title)
class spec_writer(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.showMaximized()
        self.centralwidget= QtWidgets.QWidget(self)
        self.verticalLayout= QtWidgets.QVBoxLayout(self.centralwidget)
        self.core_tab= QtWidgets.QTabWidget(self.centralwidget)
        self.verticalLayout.addWidget(self.core_tab)
        self.add_tab_btn= QtWidgets.QPushButton(self.centralwidget)
        self.verticalLayout.addWidget(self.add_tab_btn)
        self.refresh_tab_btn= QtWidgets.QPushButton(self.centralwidget)
        self.verticalLayout.addWidget(self.refresh_tab_btn)
        self.setCentralWidget(self.centralwidget)
        self.add_tab_btn.setText("Add Tab")
        self.refresh_tab_btn.setText("Refresh Tabs")
        self.core_tab.setEnabled(True)
        self.core_tab.setTabShape(QtWidgets.QTabWidget.Rounded)
        self.core_tab.setElideMode(QtCore.Qt.ElideNone)
        self.core_tab.setDocumentMode(False)
        self.core_tab.setTabsClosable(True)
        self.core_tab.setMovable(True)
        self.core_tab.setTabBarAutoHide(False)
        self.tab_counter= 0
        self.random_tabs= [("a", ["b", "c"]),
                            ("d", ["e", "f", "g"]),
                            ("h", ["i", "j", "k", "l"]),
                            ("m", ["n"]),
                            ("o", ["p", "q"]),
                            ("r", ["s", "t", "u", "v", "w", "x", "y", "z"])]
        self.add_tab_btn.clicked.connect(self.openRandomTab)
        self.refresh_tab_btn.clicked.connect(self.refreshAllTabs)
    def openRandomTab(self):
        tab= data_tab(self.core_tab, "test " + str(self.tab_counter))
        self._drawDataGraph(self.tab_counter % len(self.random_tabs), tab)
        self.tab_counter += 1
        self.core_tab.setCurrentIndex(self.core_tab.indexOf(tab))
    def _drawDataGraph(self, tabNb, dataWidget):
        dataWidget.axe.cla()
        # 1. draw graph
        producer= self.random_tabs[tabNb][0]
        consumers= self.random_tabs[tabNb][1]
        color_map= []
        DG= nx.DiGraph()
        for cons in consumers:
            DG.add_edge(producer, cons, label="labeltest1")
        for i in range(len(DG.nodes())):
            if i < 1 + len(consumers):
                color_map.append("#DCE46F")
            else:
                color_map.append("#6FA2E4")
        pos= nx.shell_layout(DG)
        labels= nx.get_edge_attributes(DG, 'label')
        nx.draw(DG, pos, node_color=color_map, with_labels=True, font_size=8, node_size=1000, node_shape='o', ax= dataWidget.axe)
        nx.draw_networkx_edge_labels(DG, pos, edge_labels=labels)
        dataWidget.canvas.draw()
    def refreshAllTabs(self):
        # loop through all pages and associated to get
        for tab_index in range(self.core_tab.count()):
            data_tab_widget= self.core_tab.widget(tab_index)
            # draw graph
            self._drawDataGraph(tab_index % len(self.random_tabs), data_tab_widget)
sys.argv= ['']
app= QtWidgets.QApplication(sys.argv)
cbtc_spec_writer= spec_writer()
cbtc_spec_writer.show()
app.exec_()

라벨이 표시되는 것이 무엇인지 모르지만 PYQT5 응용 프로그램에 포함되지 않은 동일한 code를 실행할 때 (PLT.Show ()와 직접 작동합니다). 그래서 캔버스 설정에서 뭔가가 누락 된 것 같습니다.

편집 : 아래는 내가 얻고 싶지만 pyqt5 응용 프로그램에 내장 된 것입니다. 현재 "LABELTEST1"라벨은 표시되지 않습니다

나는 당신을 이해하지 못한다. 당신이 얻고 싶은 것을 더 잘 설명 할 수 있겠습니까?

eyllanesc2021-09-17 22:42:12

분명하지 않으면 죄송합니다. 나는 그래프의 가장자리 (노드에서 다른 화살표로)가 레이블을 붙이기 위해 (텍스트가 있으려면)을 원합니다. 나는 더 명확하게하기 위해 이미지를 추가했습니다.

ThylowZ2021-09-17 22:42:12
  • 이전 vue.js : VUE JS 라우터 링크 ID + 1.
  • 다음 javascript : 내 조건을 템플릿에 넣거나 다른 템플릿을 렌더링해야합니까?