Необходимо добавить стартовое окно к основному PyQt

Рейтинг: 1Ответов: 1Опубликовано: 10.05.2023

Нужно добавить стартовое окно файл primer1.py к основному main.py.

Чтобы при запуске приложения открывалось окно из файла primer1.py, а после нажатия на кнопку уже открывалось основное окно main.py

файл main.py

import sys
import tensorflow as tf
from keras.utils import load_img, img_to_array

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QFileDialog, QLabel, QPushButton


class Window(QMainWindow, QTableWidget):
    def __init__(self):
        super().__init__()
        # Инициализация основного окна программы и его компонентов
        self.pixmap = None
        self.showDialog = None
        self.file_name = None
        self.acceptDrops()
        self.setWindowTitle("Приложение для распознования патологии легких на основе нейронной сети")
        self.setGeometry(650, 180, 660, 700)

        # Создание поля для вывода выбранного изображения
        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(140, 120, 400, 400)
        # Создание поля для вывода результата
        self.label1 = QLabel('Здесь будет отображаться результат', self)
        self.label1.setGeometry(120, 350, 450, 450)
        self.label1.setAlignment(QtCore.Qt.AlignCenter)

        # Добавление кнопки для загрузки фалйа
        self.button = QPushButton("Выбор изображения", self)
        self.button.setGeometry(120, 650, 200, 40)
        self.button1 = QPushButton("Выход", self)
        self.button1.setGeometry(360, 650, 200, 40)
        self.show()

        # Обработка события нажатия на кнопку выполнения
        self.button.clicked.connect(self.get_file_path)
        # Обработка события нажатия на кнопку завершения работы приложения
        self.button1.clicked.connect(self.exit_app)

    def get_file_path(self):
        """
        Метод для получения пути к выбранному для анализа файлу.
        :return:
        """
        global file_name
        self.label.clear()
        self.label1.setText('РАБОТАЕТ НЕЙРОСЕТЬ!! НЕ ОТВЛЕКАТЬ')
        try:
            file_name = QFileDialog.getOpenFileName(self, 'Open file',
                                                '"C:/Users/nikne/covid"')[0]
        except Exception as e:
            print(e)
        # Вызов метода для вывода изображения
        self.print_image(file_name)
        # Вызов метода для классификации пневмонии на изображении
        self.load_model(file_name)

    def print_image(self, file_name):
        """
        Метод для отображения выбранного пользователем изображения.
        :param file_name: указывает путь к выбранному файлу.
        :return:
        """
        self.pixmap = QPixmap(file_name)
        self.pixmap = self.pixmap.scaled(400, 400)

        # Добавление изображения в поле
        self.label.setPixmap(self.pixmap)

    def result_implementation(self, predict_classes):
        """
        Метод для интрпритации численного результата работы нейронной сети.
        :param predict_classes: хранит предсказанный для выбранного изображения класс.
        :return:
        """

        for i in predict_classes:
            if i >= 0.5:
                self.label1.setText('Обнаружен COVID')
            else:
                self.label1.setText('Патологий не обнаружено')

    def load_model(self, file_name):
        """
        Метод для загрузки и использования модели, модель загружается в память только при первом вызове метода.
        :param file_name: хранит путь к файлу выбранному пользователем для анализа.
        :return:
        """
        global saved_model, my_image
        model_k = 0
        self.label1.clear()

        # Проверка загружена ли модель в память
        if model_k == 0:
            saved_model = tf.keras.models.load_model("covid_classify")
            model_k += 1

        # Предобработка выбранного пользователем изображения для классификации, если файла не существует по пути,
        # вызывается исключение
        try:
            my_image = load_img(file_name, target_size=(200, 200))
            my_image = img_to_array(my_image)
            my_image = my_image.reshape((1, my_image.shape[0], my_image.shape[1], my_image.shape[2]))
            my_image = tf.keras.applications.resnet50.preprocess_input(my_image)
            # Использование модели для классификации выбранного пользователем изображения
            predict = saved_model.predict(my_image)
            # Вызов метода для интерпритации результатов работы модели
            self.result_implementation(predict)
        except Exception as e:
            print(e)



    @staticmethod
    def exit_app():
        """
        Метод для закрытия приложения.
        :return:
        """
        QApplication.quit()


# Объявления приложения PyQt
App = QApplication(sys.argv)
App.setStyleSheet("QLabel{font-size: 18pt;}")

# Создание экземпляра главного окна программы
window = Window()

# Запуск приложения
sys.exit(App.exec()) 

файл primer1.py

from PyQt5 import QtCore, QtGui, QtWidgets
import logo_rc
# from main import Window



class Ui_MainWindow(object):

    # def openWindow(self):
    #     self.window =QtWidgets.QMainWindow()
    #     self.ui = primary_Window()
    #     self.ui.init(self.window)
    #     self.window.show()

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(619, 548)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(230, 440, 181, 41))

        # self.pushButton.clicked.connect(self.openWindow())


        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 20, 541, 81))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(160, 90, 311, 331))
        self.label_2.setText("")
        self.label_2.setPixmap(QtGui.QPixmap("swsu_contur_main (1).png"))
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 619, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        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"))
        self.pushButton.setText(_translate("MainWindow", "Запуск"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">Приложение для распознования патологии легких </span></p><p align=\"center\"><span style=\" font-size:16pt;\">на основе нейронной сети</span></p></body></html>"))



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_()) 

Ответы

▲ 1Принят

Пожалуйста, всегда приводите минимально-воспроизводимый пример, еоторый демонстрирует проблему.

Не рекомендуется злоупотреблять глобальными переменными,
как указано в Почему глобальные переменные - зло?

Ваша задача может выглядеть примерно так:

# ??? import tensorflow as tf
# ??? from keras.utils import load_img, img_to_array

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, \
    QFileDialog, QLabel, QPushButton


class Window(QMainWindow, QTableWidget):
    def __init__(self):
        super().__init__()
        # Инициализация основного окна программы и его компонентов
        self.pixmap = None
        self.showDialog = None
        self.file_name = None
        self.acceptDrops()
        self.setWindowTitle(
            "Приложение для распознования патологии легких на основе нейронной сети")
        self.setGeometry(650, 180, 660, 700)

        # Создание поля для вывода выбранного изображения
        self.label = QtWidgets.QLabel(self)
        self.label.setGeometry(140, 120, 400, 400)
        # Создание поля для вывода результата
        self.label1 = QLabel('Здесь будет отображаться результат', self)
        self.label1.setGeometry(120, 350, 450, 450)
        self.label1.setAlignment(QtCore.Qt.AlignCenter)

        # Добавление кнопки для загрузки фалйа
        self.button = QPushButton("Выбор изображения", self)
        self.button.setGeometry(120, 650, 200, 40)
        self.button1 = QPushButton("Выход", self)
        self.button1.setGeometry(360, 650, 200, 40)
        self.show()

        # Обработка события нажатия на кнопку выполнения
        self.button.clicked.connect(self.get_file_path)
        # Обработка события нажатия на кнопку завершения работы приложения
        self.button1.clicked.connect(self.exit_app)

    def get_file_path(self):
        """
        Метод для получения пути к выбранному для анализа файлу.
        :return:
        """
        global file_name
        self.label.clear()
        self.label1.setText('РАБОТАЕТ НЕЙРОСЕТЬ!! НЕ ОТВЛЕКАТЬ')
        try:
            file_name = QFileDialog.getOpenFileName(self, 'Open file',
                                                '"C:/Users/nikne/covid"')[0]
        except Exception as e:
            print(e)
        # Вызов метода для вывода изображения
        self.print_image(file_name)
        # Вызов метода для классификации пневмонии на изображении
        self.load_model(file_name)

    def print_image(self, file_name):
        """
        Метод для отображения выбранного пользователем изображения.
        :param file_name: указывает путь к выбранному файлу.
        :return:
        """
        self.pixmap = QPixmap(file_name)
        self.pixmap = self.pixmap.scaled(400, 400)

        # Добавление изображения в поле
        self.label.setPixmap(self.pixmap)

    def result_implementation(self, predict_classes):
        """
        Метод для интрпритации численного результата работы нейронной сети.
        :param predict_classes: хранит предсказанный для выбранного изображения класс.
        :return:
        """

        for i in predict_classes:
            if i >= 0.5:
                self.label1.setText('Обнаружен COVID')
            else:
                self.label1.setText('Патологий не обнаружено')

    def load_model(self, file_name):
        """
        Метод для загрузки и использования модели, модель загружается в память только при первом вызове метода.
        :param file_name: хранит путь к файлу выбранному пользователем для анализа.
        :return:
        """
        global saved_model, my_image
        model_k = 0
        self.label1.clear()

        # Проверка загружена ли модель в память
        if model_k == 0:
            saved_model = tf.keras.models.load_model("covid_classify")
            model_k += 1

        # Предобработка выбранного пользователем изображения для классификации, если файла не существует по пути,
        # вызывается исключение
        try:
            my_image = load_img(file_name, target_size=(200, 200))
            my_image = img_to_array(my_image)
            my_image = my_image.reshape((1, my_image.shape[0], my_image.shape[1], my_image.shape[2]))
            my_image = tf.keras.applications.resnet50.preprocess_input(my_image)
            # Использование модели для классификации выбранного пользователем изображения
            predict = saved_model.predict(my_image)
            # Вызов метода для интерпритации результатов работы модели
            self.result_implementation(predict)
        except Exception as e:
            print(e)

    @staticmethod
    def exit_app():
        """
        Метод для закрытия приложения.
        :return:
        """
        QApplication.quit()


# ???import logo_rc
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(619, 548)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(230, 440, 181, 41))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 20, 541, 81))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(160, 90, 311, 331))
        self.label_2.setText("")
        self.label_2.setPixmap(QtGui.QPixmap("swsu_contur_main (1).png"))
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 619, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        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"))
        self.pushButton.setText(_translate("MainWindow", "Запуск"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:16pt;\">Приложение для распознования патологии легких </span></p><p align=\"center\"><span style=\" font-size:16pt;\">на основе нейронной сети</span></p></body></html>"))


class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        
        self.setupUi(self)
        
        self.pushButton.clicked.connect(self.openWindow)

    def openWindow(self):
        self.window = Window()
        self.window.show()  
        self.hide()    
        

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyleSheet("QLabel {font-size: 18pt;}")
    window = MainWindow()
    window.show() 
    sys.exit(app.exec()) 

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