установите значение 'MacOSX' с помощью следующего кода: ... ... из matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as Canvas

понимаю лучший способ связать фигуру matplotlib с формой, созданной из Qt Designer. У меня есть форма, которую я создал в QtDesigner, а затем скомпилировал в python через pyuic5. Моя основная программа:

import app_framework as af
import matplotlib
from PyQt5 import QtWidgets
import sys

matplotlib.use('Qt5Agg')

app = QtWidgets.QApplication(sys.argv)
form = af.MyApp()
form.show()
app.exec_()

где myApp вызывает форму app_framework.py, созданную из Qt Designer, а затем преобразованную в pyuic5 (design.py):

from PyQt5.QtWidgets import QApplication, QMainWindow
import design

class MyApp(QMainWindow, design.Ui_mainWindow):
   def __init(self):
       super(self.__class__, self).__init__()
       <button initializations>
       <function definitions for button callbacks>

Я не понимаю, где в этой структуре я могу связать фигуру matplotlib с готовым пустым виджетом в QtDesigner или чем-то в этом роде, чтобы я мог отображать новые данные в окне графического интерфейса по мере того, как что-то происходит (ввод текста, нажатие кнопки , так далее.)

Я нашел некоторые темы здесьТАК а такжесайт matplotlib, но я не уверен, что понимаю правильный процесс создания пространства для этого виджета в форме Qt Designer, затем связывания графика и / или создания виджета через некоторое время, а затем связывания и построения графика.

Пока что я создал пустой QWidget внутри Qt Creator, а затем после компиляции pyuic5 я изменил файл design.py следующим образом:

from PyQt5 import QtCore, QtGui, QtWidgets

# **** ADDED THIS
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as Canvas
# **** 

class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        <mainWindow setup stuff>
        self.centralwidget = QtWidgets.QWidget(mainWindow)

        # ****ALTERED THIS FROM self.plotWidget = QtWidgets.QWidget(self.centralWidget)
        self.plotWidget = MplWidget(self.centralWidget)
        # ***** 

        self.plotWidget.setGeometry(QtCore.QRect(20, 250, 821, 591))
        self.plotWidget.setObjectName("plotWidget")

  # **** ADDED THIS 
class MplCanvas(Canvas):
    def __init__(self):
        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)
        Canvas.__init__(self, self.fig)
        Canvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        Canvas.updateGeometry(self)


class MplWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.canvas = MplCanvas()
 # ***********

а затем app_framework.py как:

from PyQt5.QtWidgets import QApplication, QMainWindow
import design

class MyApp(QMainWindow, design.Ui_mainWindow):
   def __init(self):
       super(self.__class__, self).__init__()
       self.setupUi(self)
       self.pushButton_plotData.clicked.connect(self.plot_data)

    def plot_data(self):
        x=range(0, 10)
        y=range(0, 20, 2)
        self.plotWidget.canvas.ax.plot(x, y)
        self.plotWidget.canvas.draw()

Я думал, что это будет работать, но когда я нажимаю кнопку сюжета, ничего не происходит. Он не закрывается, он просто ничего не строит. Я предполагаю, что упускаю что-то фундаментальное для построения фигуры и / или холста matplotlib в этом пустом виджете

Ответы на вопрос(1)

Ваш ответ на вопрос