Как сохранить построенный график PyQtGraph в дополнительном окне?

Суть проблема:
после перехода с главного окна на дополнительное пользователь должен построить график, затем вернуться в главное меню.

Дальше он может вернуться в дополнительное окно и увидеть ранее построенный график. В моём коде этого не происходит, так как график каждый раз строится заново.

main.py:

class EngineerGUI(QtWidgets.QMainWindow, Ui_EngineerGUI):
    def __init__(self):
        super(EngineerGUI, self).__init__()
        self.setupUi(self)
        self.p1 = self.set_graph_ui()
        self.graph_layout.addWidget(self.btn)
        self.btn.clicked.connect(self.graphic)
        self.btn_EngineerGUI_to_MainGUI.clicked.connect(self.returnMainWindow)

    def returnMainWindow(self):
        self.hide()
        self.MainWindow = MainWindow()
        self.MainWindow.show()

    def set_graph_ui(self):
        pg.setConfigOptions(antialias=True)
        win = pg.GraphicsLayoutWidget()
        self.graph_layout.addWidget(win)
        p1 = win.addPlot(title="Профиль трассы")
        p1.setMouseEnabled(False, False)
        p1.setLabel('left', text='Высота', color='white', units='м')
        p1.showGrid(x=True, y=True)
        p1.setLogMode(x=False, y=False)
        p1.setLabel('bottom', text='Расстояние', color='white', units='км')
        win.setBackground("w")
        legend = p1.addLegend()
        legend.setPos(0, 0)

        return p1

    def graphic(self):
        self.p1.clear()
        x_graph = range(0, 950)
        y_height_point = list_height
        y_hydraulic_test = list_hydraulic_test
        y_hydraulic_max = list_hydraulic_max
        y_hydraulic_allowed = list_hydraulic_allowed
        y_y_hydraulic_drd = list_hydraulic_drd
        if self.checkBox_1.isChecked():
            self.p1.plot(x_graph, y_height_point, pen={'color': 'k', 'width': 2}, name='График 1')
        if self.checkBox_2.isChecked():
            self.p1.plot(x_graph, y_hydraulic_test, pen={'color': 'g', 'width': 2}, name='График 2')
        if self.checkBox_3.isChecked():
            self.p1.plot(x_graph, y_hydraulic_max, pen={'color': 'b', 'width': 2}, name='График 3')
        if self.checkBox_4.isChecked():
            self.p1.plot(x_graph, y_hydraulic_allowed, pen={'color': 'm', 'width': 2}, name='График 4')
        if self.checkBox_5.isChecked():
            self.p1.plot(x_graph, y_y_hydraulic_drd, pen={'color': 'd', 'width': 1}, name='График 5')

EngineerGUI.py:


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_EngineerGUI(object):
    def setupUi(self, EngineerGUI):
        EngineerGUI.setObjectName("EngineerGUI")
        EngineerGUI.resize(1920, 1080)
        EngineerGUI.setMinimumSize(QtCore.QSize(1920, 1080))
        EngineerGUI.setMaximumSize(QtCore.QSize(1920, 1080))
        self.verticalLayoutWidget = QtWidgets.QWidget(EngineerGUI)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 540, 1481, 541))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.graph_layout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.graph_layout.setContentsMargins(0, 0, 0, 0)
        self.graph_layout.setObjectName("graph_layout")
        self.btn = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.btn.setObjectName("btn")
        self.graph_layout.addWidget(self.btn)
        self.checkBox_5 = QtWidgets.QCheckBox(EngineerGUI)
        self.checkBox_5.setGeometry(QtCore.QRect(1480, 900, 441, 91))
        self.checkBox_5.setSizeIncrement(QtCore.QSize(0, 0))
        self.checkBox_5.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(14)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.checkBox_5.setFont(font)
        self.checkBox_5.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.checkBox_5.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_5.setIconSize(QtCore.QSize(16, 16))
        self.checkBox_5.setTristate(False)
        self.checkBox_5.setObjectName("checkBox_5")
        self.checkBox_3 = QtWidgets.QCheckBox(EngineerGUI)
        self.checkBox_3.setGeometry(QtCore.QRect(1480, 720, 441, 91))
        self.checkBox_3.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_3.setObjectName("checkBox_3")
        self.checkBox_1 = QtWidgets.QCheckBox(EngineerGUI)
        self.checkBox_1.setGeometry(QtCore.QRect(1480, 540, 441, 91))
        self.checkBox_1.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.checkBox_1.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_1.setObjectName("checkBox_1")
        self.checkBox_2 = QtWidgets.QCheckBox(EngineerGUI)
        self.checkBox_2.setGeometry(QtCore.QRect(1480, 630, 441, 91))
        self.checkBox_2.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_2.setObjectName("checkBox_2")
        self.checkBox_4 = QtWidgets.QCheckBox(EngineerGUI)
        self.checkBox_4.setGeometry(QtCore.QRect(1480, 810, 441, 91))
        self.checkBox_4.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_4.setObjectName("checkBox_4")
        self.btn_EngineerGUI_to_MainGUI = QtWidgets.QPushButton(EngineerGUI)
        self.btn_EngineerGUI_to_MainGUI.setGeometry(QtCore.QRect(1480, 990, 441, 91))
        self.btn_EngineerGUI_to_MainGUI.setObjectName("btn_EngineerGUI_to_MainGUI")

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

    def retranslateUi(self, EngineerGUI):
        _translate = QtCore.QCoreApplication.translate
        EngineerGUI.setWindowTitle(_translate("EngineerGUI", "Отдел главного технолога"))
        self.btn.setText(_translate("EngineerGUI", "Отрисовать графики"))
        self.checkBox_5.setText(_translate("EngineerGUI", "Добавить допустимое разрешённое давление"))
        self.checkBox_3.setText(_translate("EngineerGUI", "Добавить максимальное давление"))
        self.checkBox_1.setText(_translate("EngineerGUI", "Добавить высотные отметки"))
        self.checkBox_2.setText(_translate("EngineerGUI", "Добавить испытательное давление"))
        self.checkBox_4.setText(_translate("EngineerGUI", "Добавить разрешённое давление"))
        self.btn_EngineerGUI_to_MainGUI.setText(_translate("EngineerGUI", "Вернуться в главное меню"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    EngineerGUI = QtWidgets.QWidget()
    ui = Ui_EngineerGUI()
    ui.setupUi(EngineerGUI)
    EngineerGUI.show()
    sys.exit(app.exec_())

Я попробовал решить проблему с помощью chatGPT, но результат неудовлетворительный, приложу код который получился с его помощью.
Возможно его доработать будет проще.

GPT version.py

class EngineerGUI(QtWidgets.QMainWindow, Ui_EngineerGUI):
    def __init__(self):
        super(EngineerGUI, self).__init__()
        self.setupUi(self)
        self.p1 = None  # Инициализируем переменную для хранения графика
        self.graph_data = None  # Инициализируем переменную для хранения данных графика
        self.btn.clicked.connect(self.graphic)
        self.btn_EngineerGUI_to_MainGUI.clicked.connect(self.returnMainWindow)

    def returnMainWindow(self):
        self.hide()
        self.MainWindow = MainWindow()
        self.MainWindow.show()

    def set_graph_ui(self):
        pg.setConfigOptions(antialias=True)
        win = pg.GraphicsLayoutWidget()
        self.graph_layout.addWidget(win)
        p1 = win.addPlot(title="Профиль трассы")
        p1.setMouseEnabled(False, False)
        p1.setLabel('left', text='Высота', color='white', units='м')
        p1.showGrid(x=True, y=True)
        p1.setLogMode(x=False, y=False)
        p1.setLabel('bottom', text='Расстояние', color='white', units='км')
        win.setBackground("w")
        legend = p1.addLegend()
        legend.setPos(0, 0)

        return p1

    def graphic(self):
        if self.p1 is None:  # Проверяем, создан ли график
            self.p1 = self.set_graph_ui()
        self.p1.clear()
        x_graph = range(0, 950)
        y_height_point = list_height
        y_hydraulic_test = list_hydraulic_test
        y_hydraulic_max = list_hydraulic_max
        y_hydraulic_allowed = list_hydraulic_allowed
        y_y_hydraulic_drd = list_hydraulic_drd
        if self.checkBox_1.isChecked():
            self.p1.plot(x_graph, y_height_point, pen={'color': 'k', 'width': 2}, name='График 1')
        if self.checkBox_2.isChecked():
            self.p1.plot(x_graph, y_hydraulic_test, pen={'color': 'g', 'width': 2}, name='График 2')
        if self.checkBox_3.isChecked():
            self.p1.plot(x_graph, y_hydraulic_max, pen={'color': 'b', 'width': 2}, name='График 3')
        if self.checkBox_4.isChecked():
            self.p1.plot(x_graph, y_hydraulic_allowed, pen={'color': 'm', 'width': 2}, name='График 4')
        if self.checkBox_5.isChecked():
            self.p1.plot(x_graph, y_y_hydraulic_drd, pen={'color': 'd', 'width': 1}, name='График 5')

        # Сохраняем данные графика
        self.graph_data = {
            "x_graph": x_graph,
            "y_height_point": y_height_point,
            "y_hydraulic_test": y_hydraulic_test,
            "y_hydraulic_max": y_hydraulic_max,
            "y_hydraulic_allowed": y_hydraulic_allowed,
            "y_y_hydraulic_drd": y_y_hydraulic_drd
        }

Ответы (1 шт):

Автор решения: S. Nick

Вы предоставляете не воспроизводимый пример. Пожалуйста, прежде чем опубликовать свой код, проверьте воспроизводится ли он.

Почему вы переносите ошибки, на которые я вам указывал в предыдущем вашем вопросе?

Вам есть еще над чем работать. Основная ваша проблема в методе returnMainWindow()

import sys
import numpy as np
from PyQt5 import QtWidgets, QtGui, QtCore  
from PyQt5.Qt import *
import pyqtgraph as pg


class Ui_EngineerGUI(object):
    def setupUi(self, EngineerGUI):
        EngineerGUI.setObjectName("EngineerGUI")
# !!!
#?       EngineerGUI.resize(1920, 1080)
#?       EngineerGUI.setMinimumSize(QtCore.QSize(1920, 1080))
#?       EngineerGUI.setMaximumSize(QtCore.QSize(1920, 1080))
#        self.verticalLayoutWidget = QtWidgets.QWidget(EngineerGUI)
#        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 540, 1481, 541))
#        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
# !!!
#        self.graph_layout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.graph_layout = QtWidgets.QGridLayout(EngineerGUI)        
        
        self.graph_layout.setContentsMargins(0, 0, 0, 0)
        self.graph_layout.setObjectName("graph_layout")
# !!!
        self.btn = QtWidgets.QPushButton(EngineerGUI)     # (self.verticalLayoutWidget)
        self.btn.setObjectName("btn")
        self.graph_layout.addWidget(self.btn, 8, 0, 1, 1)
        
        self.checkBox_5 = QtWidgets.QCheckBox(EngineerGUI)
        self.checkBox_5.setGeometry(QtCore.QRect(1480, 900, 441, 91))
        self.checkBox_5.setSizeIncrement(QtCore.QSize(0, 0))
        self.checkBox_5.setBaseSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(14)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.checkBox_5.setFont(font)
        self.checkBox_5.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.checkBox_5.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_5.setIconSize(QtCore.QSize(16, 16))
        self.checkBox_5.setTristate(False)
        self.checkBox_5.setObjectName("checkBox_5")
        self.checkBox_3 = QtWidgets.QCheckBox(EngineerGUI)
#        self.checkBox_3.setGeometry(QtCore.QRect(1480, 720, 441, 91))
        self.checkBox_3.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_3.setObjectName("checkBox_3")
        self.checkBox_1 = QtWidgets.QCheckBox(EngineerGUI)
#        self.checkBox_1.setGeometry(QtCore.QRect(1480, 540, 441, 91))
        self.checkBox_1.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.checkBox_1.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_1.setObjectName("checkBox_1")
        self.checkBox_2 = QtWidgets.QCheckBox(EngineerGUI)
#        self.checkBox_2.setGeometry(QtCore.QRect(1480, 630, 441, 91))
        self.checkBox_2.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_2.setObjectName("checkBox_2")
        self.checkBox_4 = QtWidgets.QCheckBox(EngineerGUI)
#        self.checkBox_4.setGeometry(QtCore.QRect(1480, 810, 441, 91))
        self.checkBox_4.setStyleSheet("QCheckBox {\n"
"    background-color: rgb(255, 255, 255);\n"
"    font: 14pt \"Arial\";\n"
"    color: rgb(0, 0, 0);\n"
"\n"
"}\n"
"\n"
"QCheckBox:hover {\n"
"    background-color: rgb(0, 0, 0);\n"
"    font: 16pt \"Arial\";\n"
"    color: rgb(255, 255, 255);\n"
"}\n"
"\n"
"QCheckBox::indicator {\n"
"    width: 30px;\n"
"    height: 30px; \n"
"}")
        self.checkBox_4.setObjectName("checkBox_4")
        
        self.btn_EngineerGUI_to_MainGUI = QtWidgets.QPushButton(EngineerGUI)
        self.btn_EngineerGUI_to_MainGUI.setGeometry(QtCore.QRect(1480, 990, 441, 91))
        self.btn_EngineerGUI_to_MainGUI.setObjectName("btn_EngineerGUI_to_MainGUI")
        self.graph_layout.addWidget(self.btn_EngineerGUI_to_MainGUI, 8, 1, 1, 1)        
        

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

    def retranslateUi(self, EngineerGUI):
        _translate = QtCore.QCoreApplication.translate
        EngineerGUI.setWindowTitle(_translate("EngineerGUI", "Отдел главного технолога"))
        self.btn.setText(_translate("EngineerGUI", "Отрисовать графики"))
# !!!
        self.checkBox_5.setText(_translate("EngineerGUI", "Добавить допустимое \nразрешённое давление"))
        self.checkBox_3.setText(_translate("EngineerGUI", "Добавить \nмаксимальное давление"))
        self.checkBox_1.setText(_translate("EngineerGUI", "Добавить \nвысотные отметки"))
        self.checkBox_2.setText(_translate("EngineerGUI", "Добавить \nиспытательное давление"))
        self.checkBox_4.setText(_translate("EngineerGUI", "Добавить \nразрешённое давление"))
        self.btn_EngineerGUI_to_MainGUI.setText(_translate("EngineerGUI", "Вернуться в главное меню"))

# !!!
#class EngineerGUI(QtWidgets.QMainWindow, Ui_EngineerGUI):
# --------------> v^v^v^v^v^v^v^v^v^v^v^ <----------------------------------------        
class EngineerGUI( QtWidgets.QWidget,      Ui_EngineerGUI):                   # !!!
    def __init__(self, parent=None):                                   # +++ parent
        super(EngineerGUI, self).__init__()
        self.setupUi(self)
        self.parent = parent                                           # +++ parent
        
        self.p1 = self.set_graph_ui()
        
# ?        self.graph_layout.addWidget(self.btn) уже добавляли
        self.btn.clicked.connect(self.graphic)
        self.btn_EngineerGUI_to_MainGUI.clicked.connect(self.returnMainWindow)  # +++
# !!!        
        self.graph_layout.addWidget(self.checkBox_1, 1, 1, 1, 1)
        self.graph_layout.addWidget(self.checkBox_2, 2, 1, 1, 1)        
        self.graph_layout.addWidget(self.checkBox_3, 3, 1, 1, 1)        
        self.graph_layout.addWidget(self.checkBox_4, 4, 1, 1, 1)
        self.graph_layout.addWidget(self.checkBox_5, 5, 1, 1, 1) 
        self.fl_cb_1 = True
        self.fl_cb_2 = True
        self.fl_cb_3 = True
        self.fl_cb_4 = True
        self.fl_cb_5 = True        

    def returnMainWindow(self):
# !!!    
        self.parent.show()                                               # !!! +++ 
        self.hide()
# !!!        
#        self.MainWindow = MainWindow() # <---- тут ваша проблема, вы создаете новое окно !!!
#        self.MainWindow.show()

    def set_graph_ui(self):
        pg.setConfigOptions(antialias=True)
        win = pg.GraphicsLayoutWidget()
        self.graph_layout.addWidget(win, 0, 0, 7, 1)
        
        p1 = win.addPlot(title="Профиль трассы")
        p1.setMouseEnabled(False, False)
        p1.setLabel('left', text='Высота', color='white', units='м')
        p1.showGrid(x=True, y=True)
        p1.setLogMode(x=False, y=False)
        p1.setLabel('bottom', text='Расстояние', color='white', units='км')
        win.setBackground("w")
        legend = p1.addLegend()
        legend.setPos(0, 0)
        return p1

    def graphic(self):
# !!!
        cb_1_is = self.checkBox_1.isChecked()
        cb_2_is = self.checkBox_2.isChecked()
        cb_3_is = self.checkBox_3.isChecked()
        cb_4_is = self.checkBox_4.isChecked()
        cb_5_is = self.checkBox_5.isChecked()
# !!!    
        if (not cb_1_is) and (not cb_2_is) and (not cb_3_is) \
                            and (not cb_4_is) and (not cb_5_is):
            #self.p1.clear()
            self.p1 = self.set_graph_ui()                                  # !!!
            self.fl_cb_1 = True
            self.fl_cb_2 = True
            self.fl_cb_3 = True
            self.fl_cb_4 = True
            self.fl_cb_5 = True
# !!!        
        x_graph = range(0, 10)                            # range(0, 950)
        y_height_point = np.random.normal(size=10) * 10   #  list_height
        y_hydraulic_test = np.random.normal(size=10) * 10 #  list_hydraulic_test
        y_hydraulic_max = np.random.normal(size=10) * 10  #  list_hydraulic_max
        y_hydraulic_allowed = np.random.normal(size=10) * 10 #  list_hydraulic_allowed
        y_y_hydraulic_drd = np.random.normal(size=10) * 10   #  list_hydraulic_drd
# !!!        
        if cb_1_is and self.fl_cb_1:
            self.p1.plot(x_graph, y_height_point, pen={'color': 'k', 'width': 2}, name='График 1')
            self.fl_cb_1 = False
        if cb_2_is and self.fl_cb_2:
            self.p1.plot(x_graph, y_hydraulic_test, pen={'color': 'g', 'width': 2}, name='График 2')
            self.fl_cb_2 = False
        if cb_3_is and self.fl_cb_3:
            self.p1.plot(x_graph, y_hydraulic_max, pen={'color': 'b', 'width': 2}, name='График 3')
            self.fl_cb_3 = False
        if cb_4_is and self.fl_cb_4:
            self.p1.plot(x_graph, y_hydraulic_allowed, pen={'color': 'm', 'width': 2}, name='График 4')
            self.fl_cb_4 = False
        if cb_5_is and self.fl_cb_5:
            self.p1.plot(x_graph, y_y_hydraulic_drd, pen={'color': 'd', 'width': 1}, name='График 5')
            self.fl_cb_5 = False

# !!! главное окно 
class MainWindow( QtWidgets.QWidget): 
    def __init__(self):
        super(MainWindow, self).__init__()

        self.pushButton = QtWidgets.QPushButton('Открыть дополнительное окно')
        self.pushButton.clicked.connect(self.show_windows_2)  
        
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.pushButton) 

        self.engineerGUI = EngineerGUI(self)                           # !!! +++
        
 
    def show_windows_2(self):                                          # !!! +++
        self.engineerGUI.show()                                        # !!! +++
        self.hide()
        
 
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()                         # w = EngineerGUI()
    w.resize(900, 400)
    w.show()
    sys.exit(app.exec())            

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка