Почему возникает ошибка 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", "Выберите изображение
"))
Отслеживать
72.6k 105 105 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаков
задан 18 мая 2021 в 23:36
Рамиль Нуртдинов Рамиль Нуртдинов
1 1 1 бронзовый знак
Во врагменте Python файл окна открытия перепутаны отступы, скорее всего getfile и retranslateUi тоже являются частью класса, судя по первому аргументу self ? А чтобы обращаться к атрибуту, надо его сначала задать. Прежде, чем писать вот так self.Osnovnoe_Okno , нужно предварительно где-то в классе (как правило __init__ ) написать self.Osnovnoe_Okno = <что-то>. А в вашем коде ничего подобного нет.что-то>
19 мая 2021 в 3:21
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Не изменяйте код, сгенерированный 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", "Выберите изображение
")) #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_())
Как устранить ошибку AttributeError на питоне?

Вы создали объект класса list, например как-то a = [1,2,3]
А потом пытаетесь сделать что-то вроде этого a.read().
Такого метода нет в списках (list), поэтому выдает ошибку.
Ответ написан более двух лет назад
Комментировать
Нравится 2 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- PHP
- +1 ещё
Как unserialize данные от питона?
- 1 подписчик
- 9 минут назад
- 15 просмотров
Объясните возникновение ошибки AttributeError
Здравствуйте.
Не понимаю, почему вылазит ошибка. Надеюсь, кто-нибудь объяснит.
Код довольно понятный, полагаю, в комментировании не нуждается
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
class Workers(): def __init__(self , ID , name): self.ID = ID self.name = name def count_salary(self): return FullWorker.ID class FullWorker(Workers): def __init__(self , ID , name , stavka): self.ID = ID self.name = name self.stavka = stavka class HourWorker(Workers): def __init__(self , ID , name , stavka): self.ID = ID self.name = name self.stavka = stavka worker1 = FullWorker(1 , "Ivanov" , 1800) worker1.count_salary()
На выходе следующая ошибка:
Кликните здесь для просмотра всего текста
Traceback (most recent call last):
File «C:/Python34/test.py», line 26, in
worker1.count_salary()
File «C:/Python34/test.py», line 8, in count_salary
return FullWorker.ID
AttributeError: type object ‘FullWorker’ has no attribute ‘ID’
Python — AttributeError: ‘module’ object has no attribute ‘SymbolInventory’
Объясните, плиз, что это означает? И может ли это быть связано с недоустановкой Питона?
Output dictionary AudioBook/interim_files/dict opened Source dictionary AudioBook/interim_files/pronDict opened Dictionary AudioBook/interim_files/dict created - 10 words processed, 1 missing /usr/bin/g2p.py:37: DeprecationWarning: the sets module is deprecated import math, sets, sys Traceback (most recent call last): File "/usr/bin/g2p.py", line 263, in tool.run(main, options, args) File "/usr/lib/python2.6/site-packages/tool.py", line 62, in run status = runMain(main, options, args) File "/usr/lib/python2.6/site-packages/tool.py", line 98, in runMain status = main(options, args) File "/usr/bin/g2p.py", line 200, in main model = SequiturTool.procureModel(options, loadSample, log=stdout) File "/usr/lib/python2.6/site-packages/SequiturTool.py", line 207, in procureModel return tool.procureModel() File "/usr/lib/python2.6/site-packages/SequiturTool.py", line 160, in procureModel model = pickle.load(open(self.options.modelFile)) AttributeError: 'module' object has no attribute 'SymbolInventory' g2p.py mv AudioBook/interim_files/dlog AudioBook/interim_files/logs/dlog1 failed: 256 at AudioBook/Dictionary.pm line 139 AudioBook::Dictionary::getG2PPronunciations('AudioBook::Dictionary=HASH(0x8d3fa8c)', 'AudioBook/interim_files/MissingWords_out') called at AudioBook/MissingWords.pm line 85 AudioBook::MissingWords::getText('AudioBook::MissingWords=HASH(0x8d3f9dc)') called at AudioBook/Chapter.pm line 69 AudioBook::Chapter::processText('AudioBook::Chapter=HASH(0x8b23b34)') called at ./AudioCrop.pm line 115 AudioCrop::crop('AudioCrop=HASH(0x8b078c4)') called at ./AudioCrop.pm line 51