Очистить виджет от графиков MplWidget
При попытке задействовать кнопку очистки виджета (self.pushButton_Clean_All.clicked.connect(self.clear)) ничего не происходит, код прилагается:
from PyQt5.QtWidgets import*
from PyQt5.uic import loadUi
from matplotlib.backends.backend_qt5agg import (NavigationToolbar2QT as NavigationToolbar)
import numpy as np
class MatplotlibWidget(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
loadUi("qt_designer.ui",self)
self.setWindowTitle("Модель распределения температуры при закачке жидкости в скважину")
self.pushButton_graph.clicked.connect(self.update_graph)
self.addToolBar(NavigationToolbar(self.MplWidget.canvas, self))
self.pushButton_Clean_All.clicked.connect(self.clear)
def update_graph(self):
T0= self.spinBox.value()
G= self.doubleSpinBox.value()
c= self.spinBox_1.value()
p= self.spinBox_2.value()
Q= self.spinBox_3.value()
m= self.doubleSpinBox_2.value()
r0= self.spinBox_4.value()
r1= self.doubleSpinBox_3.value()
r2= self.doubleSpinBox_4.value()
r3= self.doubleSpinBox_5.value()
r4= self.doubleSpinBox_6.value()
r5= self.doubleSpinBox_7.value()
aгп= self.spinBox_5.value()
tр= self.spinBox_6.value()
l= self.doubleSpinBox_8.value()
lнкт= self.doubleSpinBox_9.value()
lок= self.doubleSpinBox_10.value()
lц= self.doubleSpinBox_11.value()
lмт= self.doubleSpinBox_12.value()
lгп= self.doubleSpinBox_13.value()
dT0= self.doubleSpinBox_14.value()
Re=p*Q/(np.pi*m*(r1)**2)
Pr=m*c/l
Nu=0.021*Re**0.8*Pr**0.43
t=aгп*tр/(r5)**2
Td=np.log((np.exp(-0.2*t))+(1.5-0.3719*(np.exp(-t))*np.sqrt(t)))
h=2*np.pi/(1/(l*Nu)+1/lнкт*np.log(r2/r1)+1/lок*np.log(r4/r3)+1/lц*np.log(r5/r4)+1/lмт*np.log(r3/r2)+1/lгп*Td)
a=h/(2*np.pi*r1)
B=c*p*Q/(2*np.pi*r0*a)
x = np.arange(0, 2000, 1)
y =T0+G*x-B*G*(1-np.exp(-x/B))+dT0*np.exp(-x/B)
self.MplWidget.canvas.axes.plot(y,x)
self.MplWidget.canvas.axes.grid()
self.MplWidget.canvas.axes.set_title('Модель Чекалюка')
self.MplWidget.canvas.draw()
def clear(self):
self.MplWidget.canvas.axes.figure.clear()
app = QApplication([])
window = MatplotlibWidget()
window.show()
app.exec_()
Интересует именно строка self.MplWidget.canvas.axes.figure.clear(). Менял на self.MplWidget.canvas.axes.clear(), но результат тот же. В чём может быть проблема? На всякий случай прилагаю также код загружаемого виджета:
from PyQt5.QtWidgets import*
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure
class MplWidget(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self, parent)
self.canvas = FigureCanvas(Figure())
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.canvas)
self.canvas.axes = self.canvas.figure.add_subplot(111)
self.setLayout(vertical_layout)
Не уверен, можно ли так делать, но чтобы не плодить темы с идентичным кодом хотел бы задать вопрос по второй проблеме:
При попытке построить следующий график через одно нажатие на self.pushButton_graph.clicked.connect(self.update_graph) пропадает сетка, также не могу понять в чем проблема. Пытался grid() вставлять в разные части кода, но безрезультатно. Также прикрепляю ui-файл:
Заранее спасибо за ответ!