Как сделать так, чтобы программа работала после выбора нового файла
У меня есть программа с интерфейсом pyqt5. Изначально я выбираю через кнопку путь к файлу базы данных, потом нажимаю "построить график" в каждой из вкладок и в них всех строится графики через matplotlib. Но если я выбираю другой файл, после того как графики построил, и нажимаю "построить график" еще раз, то программа ничего не выполняет.
Как сделать так, чтобы после нажатия "построить график" программа строила новые графики по новой бд из нового файла?
Код большой и может быть непонятный :С
import sys # sys нужен для передачи argv в QApplication
import os # Отсюда нам понадобятся методы для отображения содержимого директорий
from PyQt5 import QtWidgets, QtCore, QtGui
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import design2 # Это наш конвертированный файл дизайна
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy, QVBoxLayout, QMessageBox, QWidget
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
from create_Graph import getGraph
class MyMplCanvas(FigureCanvas):
def __init__(self, fig, parent=None):
self.fig = fig
FigureCanvas.__init__(self, self.fig)
FigureCanvas.setSizePolicy(self, QSizePolicy.Expanding, QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
class Window(QtWidgets.QMainWindow, design2.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self) # Это нужно для инициализации нашего дизайна
self.EnterBD_2.clicked.connect(self.getFileName)
self.Button1.clicked.connect(self.getFirst)
self.Button2.clicked.connect(self.getSecond)
self.Button3.clicked.connect(self.getThird)
self.Button4.clicked.connect(self.getFourth)
self.wb_path = ""
self.strError = ""
self.WindowError = QMessageBox()
def Error(self):
msg = True
if (self.wb_path == ""):
self.showError("Спочатку оберіть файл бази даних")
self.WindowError.show()
msg = False
elif(self.wb_path[-4:] != 'xlsx'):
self.showError("Оберіть файл формату xlsx")
self.WindowError.show()
msg = False
return msg
def showError(self, str):
self.WindowError.setIcon(QMessageBox.Critical)
self.WindowError.setWindowTitle("Помилка!")
self.WindowError.setText(str)
self.WindowError.setStandardButtons(QMessageBox.Ok)
def getFileName(self):
wb_path = QtWidgets.QFileDialog.getOpenFileName(self, "Оберіть базу даних")
self.wb_path = wb_path[0]
def getFirst(self, Graph):
if(self.Error()):
Graph = getGraph(self.wb_path)
self.fig = Graph.printGraphFirst()
self.widget = QtWidgets.QVBoxLayout(self.widget)
# получение объекта класса холста с нашим рисунком
self.canavas = MyMplCanvas(self.fig)
# Размещение экземпляра класса холста в шаблоне размещения
self.widget.addWidget(self.canavas)
# получение объекта класса панели управления холста
self.toolbar = NavigationToolbar(self.canavas, self)
# Размещение экземпляра класса панели управления в шаблоне размещения
self.widget.addWidget(self.toolbar)
def getSecond(self, Graph):
if(self.Error()):
Graph = getGraph(self.wb_path)
self.fig = Graph.printGraphSecond()
self.widget_2 = QtWidgets.QVBoxLayout(self.widget_2)
# получение объекта класса холста с нашим рисунком
self.canavas_2 = MyMplCanvas(self.fig)
# Размещение экземпляра класса холста в шаблоне размещения
self.widget_2.addWidget(self.canavas_2)
# получение объекта класса панели управления холста
self.toolbar = NavigationToolbar(self.canavas_2, self)
# Размещение экземпляра класса панели управления в шаблоне размещения
self.widget_2.addWidget(self.toolbar)
def getThird(self, Graph):
if(self.Error()):
Graph = getGraph(self.wb_path)
self.fig = Graph.printGraphThird()
self.widget_3 = QtWidgets.QVBoxLayout(self.widget_3)
# получение объекта класса холста с нашим рисунком
self.canavas_3 = MyMplCanvas(self.fig)
# Размещение экземпляра класса холста в шаблоне размещения
self.widget_3.addWidget(self.canavas_3)
# получение объекта класса панели управления холста
self.toolbar = NavigationToolbar(self.canavas_3, self)
# Размещение экземпляра класса панели управления в шаблоне размещения
self.widget_3.addWidget(self.toolbar)
def getFourth(self, Graph):
if(self.Error()):
Graph = getGraph(self.wb_path)
self.fig = Graph.printGraphFourth()
self.widget_4 = QtWidgets.QVBoxLayout(self.widget_4)
# получение объекта класса холста с нашим рисунком
self.canavas_4 = MyMplCanvas(self.fig)
# Размещение экземпляра класса холста в шаблоне размещения
self.widget_4.addWidget(self.canavas_4)
# получение объекта класса панели управления холста
self.toolbar = NavigationToolbar(self.canavas_4, self)
# Размещение экземпляра класса панели управления в шаблоне размещения
self.widget_4.addWidget(self.toolbar)
def main():
app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication
window = Window() # Создаём объект класса ExampleApp
window.show() # Показываем окно
app.exec_() # и запускаем приложение
if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем
main() # то запускаем функцию main())