Почему возникает ошибка AttributeError?

Задача следующая: есть два окна, одно основное, другое для открытия картинок.

Нужно чтобы после открытия изображения в одном окне, т.е. после нажатия на кнопку "Открыть", в другом окне это изображение появилось, для этого в этом окне есть label.

Возникает ошибка:

'Ui_Select_image' object has no attribute 'Osnovnoe_Okno'

Python файл основного окна

from PyQt5 import QtCore, QtGui, QtWidgets
from Select_image1 import Ui_Select_image
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, 
QFileDialog, QLabel, QTextEdit
from PyQt5.QtCore import QDir
from Spisok_defectov import Ui_Spisok_defectov
from Spisok_listov1 import Ui_Spisok_listov
import os

class Ui_Osnovnoe_Okno(QWidget):
    def __init__(self):
      super(Ui_Osnovnoe_Okno, self).__init__()


    def setupUi(self, Osnovnoe_Okno):
      Osnovnoe_Okno.setObjectName("Osnovnoe_Okno")
      Osnovnoe_Okno.resize(762, 272)
      self.centralwidget = QtWidgets.QWidget(Osnovnoe_Okno)
      self.centralwidget.setObjectName("centralwidget")
      self.label = QtWidgets.QLabel(self.centralwidget)
      self.label.setGeometry(QtCore.QRect(20, 20, 701, 111))
      self.label.setText("")
      self.textEdit.setObjectName("textEdit")
      Osnovnoe_Okno.setCentralWidget(self.centralwidget)
      self.menubar = QtWidgets.QMenuBar(Osnovnoe_Okno)
      self.menubar.setGeometry(QtCore.QRect(0, 0, 762, 21))
      self.menubar.setObjectName("menubar")
      self.menu = QtWidgets.QMenu(self.menubar)
      self.menu.setObjectName("menu")
      self.menu_2 = QtWidgets.QMenu(self.menubar)
      self.menu_2.setObjectName("menu_2")
      self.menu_3 = QtWidgets.QMenu(self.menubar)
      self.menu_3.setObjectName("menu_3")
      Osnovnoe_Okno.setMenuBar(self.menubar)
      self.statusbar = QtWidgets.QStatusBar(Osnovnoe_Okno)
      self.statusbar.setObjectName("statusbar")
      Osnovnoe_Okno.setStatusBar(self.statusbar)
      self.Create_projekt_button = QtWidgets.QAction(Osnovnoe_Okno)
    self.Create_projekt_button.setCheckable(False)
    self.Create_projekt_button.setObjectName("Create_projekt_button")
    self.Open_projekt_button = QtWidgets.QAction(Osnovnoe_Okno)
    self.Open_projekt_button.setObjectName("Open_projekt_button")
    self.Bd_listov = QtWidgets.QAction(Osnovnoe_Okno)
    self.Bd_listov.setObjectName("Bd_listov")
    self.Bd_listov.triggered.connect(self.Spisok_listov)
    self.Bd_defectov = QtWidgets.QAction(Osnovnoe_Okno)
    self.Bd_defectov.setObjectName("Bd_defectov")
    self.Bd_defectov.triggered.connect(self.Spisok_defectov)
    self.Select_image_button = QtWidgets.QAction(Osnovnoe_Okno)
    self.Select_image_button.setObjectName("Select_image_button")
    self.Select_image_button.triggered.connect(self.Select_image)
    self.Search_defects_button = QtWidgets.QAction(Osnovnoe_Okno)
    self.Search_defects_button.setObjectName("Search_defects_button")
    self.Segmentation_button = QtWidgets.QAction(Osnovnoe_Okno)
    self.Segmentation_button.setObjectName("Segmentation_button")
    self.menu.addAction(self.Create_projekt_button)
    self.menu.addAction(self.Open_projekt_button)
    self.menu_2.addAction(self.Bd_listov)
    self.menu_2.addAction(self.Bd_defectov)
    self.menu_3.addAction(self.Select_image_button)
    self.menu_3.addAction(self.Search_defects_button)
    self.menu_3.addAction(self.Segmentation_button)
    self.menubar.addAction(self.menu.menuAction())
    self.menubar.addAction(self.menu_2.menuAction())
    self.menubar.addAction(self.menu_3.menuAction())

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

def Select_image(self):
    self.Select_image = QtWidgets.QDialog()
    self.ui = Ui_Select_image()
    self.ui.setupUi(self.Select_image)
    self.Select_image.show()



#def getfile(self):
    #self.fname, _ = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\', "Image files (*.jpg *.gif)")
    #self.label.setPixmap(QPixmap(self.fname))

def Spisok_defectov(self):
    self.Spisok_defectov = QtWidgets.QMainWindow()
    self.ui = Ui_Spisok_defectov()
    self.ui.setupUi(self.Spisok_defectov)
    self.Spisok_defectov.show()

def Spisok_listov(self):
    self.Spisok_listov = QtWidgets.QMainWindow()
    self.ui = Ui_Spisok_listov()
    self.ui.setupUi(self.Spisok_listov)
    self.Spisok_listov.show()

def retranslateUi(self, Osnovnoe_Okno):
    _translate = QtCore.QCoreApplication.translate
    Osnovnoe_Okno.setWindowTitle(_translate("Osnovnoe_Okno", "ВКР – Нуртдинов"))
    self.menu.setTitle(_translate("Osnovnoe_Okno", "Проект"))
    self.menu_2.setTitle(_translate("Osnovnoe_Okno", "База данных"))
    self.menu_3.setTitle(_translate("Osnovnoe_Okno", "Работа с изображением"))
    self.Create_projekt_button.setText(_translate("Osnovnoe_Okno", "Создать проект"))
    self.Open_projekt_button.setText(_translate("Osnovnoe_Okno", "Открыть проект"))
    self.Bd_listov.setText(_translate("Osnovnoe_Okno", "База данных стальных листов"))
    self.Bd_defectov.setText(_translate("Osnovnoe_Okno", "База данных дефектов"))
    self.Select_image_button.setText(_translate("Osnovnoe_Okno", "Выбрать изображение"))
    self.Search_defects_button.setText(_translate("Osnovnoe_Okno", "Поиск дефектов"))
    self.Segmentation_button.setText(_translate("Osnovnoe_Okno", "Сегментировать изображение"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Osnovnoe_Okno = QtWidgets.QMainWindow()
    ui = Ui_Osnovnoe_Okno()
    ui.setupUi(Osnovnoe_Okno)
    Osnovnoe_Okno.show()
    sys.exit(app.exec_())

Python файл окна открытия

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, 
QFileDialog, QLabel, QTextEdit
from PyQt5.QtGui import QPixmap


class Ui_Select_image(QWidget):
    def __init__(self, parent= None):
       super(Ui_Select_image, self).__init__(parent)
    def setupUi(self, Select_image):
       Select_image.setObjectName("Select_image")
    Select_image.resize(400, 194)
    self.Open_button = QtWidgets.QPushButton(Select_image)
    self.Open_button.setGeometry(QtCore.QRect(140, 90, 75, 23))
    self.Open_button.setObjectName("Open_button")
    self.Open_button.clicked.connect(self.getfile)
    self.select_projekt_edit = QtWidgets.QLineEdit(Select_image)
    self.select_projekt_edit.setGeometry(QtCore.QRect(10, 60, 331, 20))
    self.select_projekt_edit.setObjectName("select_projekt_edit")
    self.tool_button = QtWidgets.QToolButton(Select_image)
    self.tool_button.setGeometry(QtCore.QRect(350, 60, 31, 22))
    self.tool_button.setObjectName("tool_button")
    self.label_image = QtWidgets.QLabel(Select_image)
    self.label_image.setGeometry(QtCore.QRect(80, 30, 201, 21))
    self.label_image.setObjectName("label_image")

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


def getfile(self, fname):
    from Osnovnoe_okno1 import Ui_Osnovnoe_Okno
    self.ui = Ui_Osnovnoe_Okno()
    self.ui.setupUi(self.Osnovnoe_Okno)

    self.fname, _ = QFileDialog.getOpenFileName(self, 'Open file', 'C:\\Users\\Lenovo\\Desktop\\VKR', "Image files (*.jpg *.gif)")
    self.ui.label.setPixmap((QPixmap(self.fname, _)))


def retranslateUi(self, Select_image):
    _translate = QtCore.QCoreApplication.translate
    Select_image.setWindowTitle(_translate("Select_image", "Dialog"))
    self.Open_button.setText(_translate("Select_image", "Открыть"))
    self.tool_button.setText(_translate("Select_image", "..."))
    self.label_image.setText(_translate("Select_image", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt;\">Выберите изображение</span></p></body></html>"))

Основное окно Окно открытия


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

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

Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

import sys
#import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, \
    QFileDialog, QLabel, QTextEdit
from PyQt5.QtCore import QDir


# ? from Spisok_defectov import Ui_Spisok_defectov
# ? from Spisok_listov1 import Ui_Spisok_listov


#from Select_image1 import Ui_Select_image
#class Ui_Select_image(QWidget):
#    def __init__(self, parent= None):
#        super(Ui_Select_image, self).__init__(parent)

class Ui_Select_image(object):        
    def setupUi(self, Select_image):
        Select_image.setObjectName("Select_image")
        Select_image.resize(400, 200)
        self.Open_button = QtWidgets.QPushButton(Select_image)
        self.Open_button.setGeometry(QtCore.QRect(140, 170, 75, 23))
        self.Open_button.setObjectName("Open_button")
#        self.Open_button.clicked.connect(self.openFile)                    # (self.getfile)
        self.select_projekt_edit = QtWidgets.QLineEdit(Select_image)
        self.select_projekt_edit.setGeometry(QtCore.QRect(10, 60, 331, 20))
        self.select_projekt_edit.setObjectName("select_projekt_edit")
        self.tool_button = QtWidgets.QToolButton(Select_image)
        self.tool_button.setGeometry(QtCore.QRect(350, 60, 31, 22))
        self.tool_button.setObjectName("tool_button")
        self.label_image = QtWidgets.QLabel(Select_image)
        self.label_image.setGeometry(QtCore.QRect(80, 30, 201, 21))
        self.label_image.setObjectName("label_image")

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


    def retranslateUi(self, Select_image):
        _translate = QtCore.QCoreApplication.translate
        Select_image.setWindowTitle(_translate("Select_image", "Dialog"))
        self.Open_button.setText(_translate("Select_image", "Открыть"))
        self.tool_button.setText(_translate("Select_image", "..."))
        self.label_image.setText(_translate("Select_image", 
            "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt;\">Выберите изображение</span></p></body></html>"))
    

#class Ui_Osnovnoe_Okno(QWidget):
#    def __init__(self):
#        super(Ui_Osnovnoe_Okno, self).__init__()
class Ui_Osnovnoe_Okno(object):
    def setupUi(self, Osnovnoe_Okno):
        Osnovnoe_Okno.setObjectName("Osnovnoe_Okno")
        Osnovnoe_Okno.resize(770, 500)
        self.centralwidget = QtWidgets.QWidget(Osnovnoe_Okno)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 20, 701, 111))
        self.label.setText("")
# ?        self.textEdit.setObjectName("textEdit")
        Osnovnoe_Okno.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(Osnovnoe_Okno)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 762, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        self.menu_3 = QtWidgets.QMenu(self.menubar)
        self.menu_3.setObjectName("menu_3")
        Osnovnoe_Okno.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(Osnovnoe_Okno)
        self.statusbar.setObjectName("statusbar")
        Osnovnoe_Okno.setStatusBar(self.statusbar)
        self.Create_projekt_button = QtWidgets.QAction(Osnovnoe_Okno)
        self.Create_projekt_button.setCheckable(False)
        self.Create_projekt_button.setObjectName("Create_projekt_button")
        self.Open_projekt_button = QtWidgets.QAction(Osnovnoe_Okno)
        self.Open_projekt_button.setObjectName("Open_projekt_button")
        self.Bd_listov = QtWidgets.QAction(Osnovnoe_Okno)
        self.Bd_listov.setObjectName("Bd_listov")
        self.Bd_listov.triggered.connect(self.Spisok_listov)
        self.Bd_defectov = QtWidgets.QAction(Osnovnoe_Okno)
        self.Bd_defectov.setObjectName("Bd_defectov")
        self.Bd_defectov.triggered.connect(self.Spisok_defectov)
        self.Select_image_button = QtWidgets.QAction(Osnovnoe_Okno)
        self.Select_image_button.setObjectName("Select_image_button")
        self.Select_image_button.triggered.connect(self.Select_image)
        self.Search_defects_button = QtWidgets.QAction(Osnovnoe_Okno)
        self.Search_defects_button.setObjectName("Search_defects_button")
        self.Segmentation_button = QtWidgets.QAction(Osnovnoe_Okno)
        self.Segmentation_button.setObjectName("Segmentation_button")
        self.menu.addAction(self.Create_projekt_button)
        self.menu.addAction(self.Open_projekt_button)
        self.menu_2.addAction(self.Bd_listov)
        self.menu_2.addAction(self.Bd_defectov)
        self.menu_3.addAction(self.Select_image_button)
        self.menu_3.addAction(self.Search_defects_button)
        self.menu_3.addAction(self.Segmentation_button)
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())
        self.menubar.addAction(self.menu_3.menuAction())

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

    def retranslateUi(self, Osnovnoe_Okno):
        _translate = QtCore.QCoreApplication.translate
        Osnovnoe_Okno.setWindowTitle(_translate("Osnovnoe_Okno", "ВКР – Нуртдинов"))
        self.menu.setTitle(_translate("Osnovnoe_Okno", "Проект"))
        self.menu_2.setTitle(_translate("Osnovnoe_Okno", "База данных"))
        self.menu_3.setTitle(_translate("Osnovnoe_Okno", "Работа с изображением"))
        self.Create_projekt_button.setText(_translate("Osnovnoe_Okno", "Создать проект"))
        self.Open_projekt_button.setText(_translate("Osnovnoe_Okno", "Открыть проект"))
        self.Bd_listov.setText(_translate("Osnovnoe_Okno", "База данных стальных листов"))
        self.Bd_defectov.setText(_translate("Osnovnoe_Okno", "База данных дефектов"))
        self.Select_image_button.setText(_translate("Osnovnoe_Okno", "Выбрать изображение"))
        self.Search_defects_button.setText(_translate("Osnovnoe_Okno", "Поиск дефектов"))
        self.Segmentation_button.setText(_translate("Osnovnoe_Okno", "Сегментировать изображение"))


class Select_image(QtWidgets.QDialog, Ui_Select_image):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.fname = ''
        
        layout = QtWidgets.QGridLayout(self)
        layout.addWidget(self.label_image, 0, 0, 1, 2, alignment=QtCore.Qt.AlignCenter)
        layout.addWidget(self.select_projekt_edit, 1, 0)
        layout.addWidget(self.tool_button, 1, 1)
        layout.addWidget(self.Open_button, 2, 0, 1, 2,)
        
        self.tool_button.clicked.connect(self.getfile)

    def getfile(self):                                                 # ? , fname):
        self.fname, _ = QFileDialog.getOpenFileName(
            self, 'Open file', '.', "Image files (*.jpg *.gif)")
        if self.fname:
            self.select_projekt_edit.setText(self.fname)
            self.label_image.setPixmap(QPixmap(self.fname).scaled(
                380, 150, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
            )
    

class Osnovnoe_Okno(QtWidgets.QMainWindow, Ui_Osnovnoe_Okno):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.layout = QtWidgets.QGridLayout(self.centralwidget)
        self.layout.addWidget(self.label, 0, 0, 1, 2, alignment=QtCore.Qt.AlignCenter) 
        
    def Select_image(self):
        self.select_image = Select_image()
        self.select_image.show()
        self.select_image.Open_button.clicked.connect(self.openFile)
        
    def openFile(self):
        print(self.select_image.fname)
        if self.select_image.fname:
            self.label.setPixmap(QPixmap(self.select_image.fname).scaled(
                750, 450, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
            )        
        
    def Spisok_defectov(self):
        self.Spisok_defectov = QtWidgets.QMainWindow()
# ?         self.ui = Ui_Spisok_defectov()
# ?         self.ui.setupUi(self.Spisok_defectov)
        self.Spisok_defectov.show()
        self.Spisok_defectov.setWindowTitle('Spisok_defectov')

    def Spisok_listov(self):
        self.Spisok_listov = QtWidgets.QMainWindow()
# ?         self.ui = Ui_Spisok_listov()
# ?         self.ui.setupUi(self.Spisok_listov)
        self.Spisok_listov.show()
        self.Spisok_listov.setWindowTitle('Spisok_listov')


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Osnovnoe_Okno()
    w.show()
    sys.exit(app.exec_()) 

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

→ Ссылка