2

I want to draw on my PyQt designer file. I made 2 py file, one is Main, and another one is ui file(pyuic) this is code of 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 is widget name

    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 is code of Main for show graph on my widget. I want to show graph on my widget, but it doesn't work. just show white window as before send signal. and doesn't print any error.

please let me know how I print it.

  • 1
    there are tons of examples in SO – Khalil Al Hooti Feb 23 '20 at 11:39
  • Does this answer your question? [Plotting matplotlib figure inside QWidget using Qt Designer form and PyQt5](https://stackoverflow.com/questions/43947318/plotting-matplotlib-figure-inside-qwidget-using-qt-designer-form-and-pyqt5) – kalzso Feb 25 '20 at 09:14

1 Answers1

0

I think you don't understand well the concept of objects. In your function show_graph(), you wrote self.graph_widget.fig, that means, fig is an attribute (a variable) of the object graph_widget, which is an object QWidget, so by writing self.graph_widget.fig = plt.Figure() has no sense. I suggest you this solution:

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()

Sorry for my English, I am French.