Почему возникает ошибка 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_())

