Как я могу показать matplotlib на моем PyQt5 Qwidget - PullRequest
1 голос
/ 23 февраля 2020

Я хочу нарисовать мой дизайнерский файл PyQt. Я сделал 2 py-файла, один - Main, а другой - файл пользовательского интерфейса (pyui c), это код UI

self.graph_widget = QtWidgets.QWidget(self.tab_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.graph_widget.sizePolicy().hasHeightForWidth())
self.graph_widget.setSizePolicy(sizePolicy)
self.graph_widget.setObjectName("graph_widget")

graph_widget - это имя виджета

    def show_graph(self):

        self.graph_widget.fig = plt.Figure()
        self.graph_widget.canvas = FigureCanvas(self.graph_widget.fig)

        canvasLayout = QVBoxLayout()
        canvasLayout.addStretch(1)

        self.graph_widget.layout = QHBoxLayout()
        self.graph_widget.layout.addLayout(canvasLayout)

        ax = self.graph_widget.fig.add_subplot(1, 1, 1) 
        ax.grid()
        self.graph_widget.canvas.draw() 

This код Main для отображения графа на моем виджете. Я хочу показать график на моем виджете, но он не работает. просто покажите белое окно, как перед отправкой сигнала. и не печатает никаких ошибок.

пожалуйста, дайте мне знать, как я его распечатываю.

1 Ответ

0 голосов
/ 25 февраля 2020

Я думаю, вы не очень хорошо понимаете концепцию объектов. В вашей функции show_graph () вы написали self.graph_widget.fig, что означает, что fig - это атрибут (переменная) объекта graph_widget, который является объектом QWidget, поэтому, написав self.graph_widget.fig = plt.Figure ( ) не имеет смысла. Я предлагаю вам это решение:

def show_graph(self):
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas #You can put it at the beginning of your program
    self.fig = plt.Figure()
    self.plot = self.fig.add_subplot()
    self.canvas = FigureCanvas(self.fig)
    self.canvas.draw()
    #Create a layout
    layout = QVBoxLayout()
    layout.addWidget(self.canvas)
    #You can now add your layout to your QWidget()
    self.graph_widget.setLayout(layout)
    #You can active the grid by the following line
    self.plot.yaxis.grid()

Извините за мой английский sh, я француз.

...