Как встроить и показать гистограмму matplotlib в определенный QFrame в графическом интерфейсе PyQt5

Я создал гистограмму с помощью matplotlib, и теперь мне нужно поместить ее в определенный QFrame. Я изо всех сил пытаюсь поместить гистограмму в QFrame.

Может кто-нибудь сказать мне, как я могу поместить гистограмму matplotlib в QFrame графического интерфейса PyQt5? Потому что я видел разные вопросы по этому поводу, но они показывают это на холсте. Мне нужно показать это в кадре или виджете.

Это мой код.

class Ui_MainWindow(object):

def get_stats(self,t):
    return get_Math(t), get_Logic(t), get_Science(t)

fig, ax = plt.subplots(figsize=(4, 4))
ind = np.arange(1, 4)

pm, pc, pn = plt.bar(ind, get_stats(0,0), width=0.5)
pm.set_facecolor('r')
pc.set_facecolor('g')
pn.set_facecolor('b')
ax.set_xticks(ind)
ax.set_xticklabels(['Math', 'Logic', 'Science'])
ax.set_ylim([0, 10])
ax.set_ylabel('Score')
ax.set_title('Exam Score')

# show the figure
#plt.show()

def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(567, 376)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")

    self.frame = QtWidgets.QFrame(self.centralwidget)
    self.frame.setGeometry(QtCore.QRect(30, 20, 501, 301))
    self.frame.setFrameShape(QtWidgets.QFrame.Box)
    self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
    self.frame.setObjectName("frame")


    MainWindow.setCentralWidget(self.centralwidget)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

Когда я запускаю его, он не объединяется, они находятся в разных контейнерах, мне нужно поместить гистограмму внутри QFrame, чтобы показать ее в нужном месте графического интерфейса.


person Jefer Bulan    schedule 19.02.2019    source источник
comment
Вы должны использовать холст, и тот холст, который вы помещаете в QFrame   -  person eyllanesc    schedule 19.02.2019
comment
Сэр, большое спасибо за ответ, но не могли бы вы дать мне простую полоску кода, как я могу это сделать? потому что я бы уже попробовал, я думаю, что я делаю что-то не так, потому что это не работает.   -  person Jefer Bulan    schedule 20.02.2019
comment
Мне нужно добавить, чтобы добавить макет, как это? .layout().addWidget(canvas) или он будет работать нормально даже без макета? потому что мне нужно, чтобы он отображался только внутри QFrame.   -  person Jefer Bulan    schedule 20.02.2019