Как сохранить построенный график 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 шт):
Вы предоставляете не воспроизводимый пример. Пожалуйста, прежде чем опубликовать свой код, проверьте воспроизводится ли он.
Почему вы переносите ошибки, на которые я вам указывал в предыдущем вашем вопросе?
Вам есть еще над чем работать. Основная ваша проблема в методе 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())

