AttributeError: 'Ui_MainWindow' object has no attribute 'setCentralWidget'

That One picture That One · Apr 6, 2017 · Viewed 24.7k times · Source

I am still working on the GUI for my Database and now i have a different error:

Traceback (most recent call last):
  File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 84, in <module>
    ex = Ui_MainWindow()
  File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 16, in __init__
    self.setupUi(self)
  File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 55, in setupUi
    MainWindow.setCentralWidget(self.centralwidget)
AttributeError: 'Ui_MainWindow' object has no attribute 'setCentralWidget'

I dont understand a thing about PyQt so i dont understand what the problem is.

The code is: (This is the edited version, Raw Version is Posted below)

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Main_Menu.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys

class Ui_MainWindow(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        self.setupUi(self)

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(387, 317)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("C:/Users/Natan Samuel Geldorp.Remytop-PC/Documents/music-note-sound-256.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.ButtonRemove = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonRemove.setObjectName("ButtonRemove")
        self.gridLayout.addWidget(self.ButtonRemove, 10, 0, 1, 1)
        self.ButtonShowAll = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonShowAll.setObjectName("ButtonShowAll")
        self.gridLayout.addWidget(self.ButtonShowAll, 7, 0, 1, 1)
        self.ButtonShowSpecific = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonShowSpecific.setObjectName("ButtonShowSpecific")
        self.gridLayout.addWidget(self.ButtonShowSpecific, 8, 0, 1, 1)
        self.Text = QtWidgets.QLabel(self.centralwidget)
        self.Text.setObjectName("Text")
        self.gridLayout.addWidget(self.Text, 1, 0, 1, 1)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 3, 0, 1, 1)
        self.ButtonAdd = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonAdd.setObjectName("ButtonAdd")
        self.gridLayout.addWidget(self.ButtonAdd, 9, 0, 1, 1)
        self.ButtonExit = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonExit.setObjectName("ButtonExit")
        self.gridLayout.addWidget(self.ButtonExit, 4, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 387, 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", "Main Menu"))
        self.ButtonRemove.setText(_translate("MainWindow", "Remove an album"))
        self.ButtonShowAll.setText(_translate("MainWindow", "Show all registerd albums"))
        self.ButtonShowSpecific.setText(_translate("MainWindow", "Show a specific album"))
        self.Text.setText(_translate("MainWindow", "Welcome to the MusicDatabase Version 2.1-2017"))
        self.label.setText(_translate("MainWindow", "Please select one of the options below."))
        self.ButtonAdd.setText(_translate("MainWindow", "Add an album"))
        self.ButtonExit.setText(_translate("MainWindow", "Exit"))
        self.label_2.setText(_translate("MainWindow", "Authors: N.S. Geldorp & H. Nahumury"))
        self.ButtonExit.clicked.connect(self.ButtonExit)

    def ButtonExit(self):
        exit()
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ex = Ui_MainWindow()
    ex.show()
    sys.exit(app.exec_())

Does anyone see the problem?

-Natan

Posting Raw Convert:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Main_Menu.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(387, 317)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("C:/Users/Natan Samuel Geldorp.Remytop-PC/Documents/music-note-sound-256.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.ButtonRemove = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonRemove.setObjectName("ButtonRemove")
        self.gridLayout.addWidget(self.ButtonRemove, 10, 0, 1, 1)
        self.ButtonShowAll = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonShowAll.setObjectName("ButtonShowAll")
        self.gridLayout.addWidget(self.ButtonShowAll, 7, 0, 1, 1)
        self.ButtonShowSpecific = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonShowSpecific.setObjectName("ButtonShowSpecific")
        self.gridLayout.addWidget(self.ButtonShowSpecific, 8, 0, 1, 1)
        self.Text = QtWidgets.QLabel(self.centralwidget)
        self.Text.setObjectName("Text")
        self.gridLayout.addWidget(self.Text, 1, 0, 1, 1)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 3, 0, 1, 1)
        self.ButtonAdd = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonAdd.setObjectName("ButtonAdd")
        self.gridLayout.addWidget(self.ButtonAdd, 9, 0, 1, 1)
        self.ButtonExit = QtWidgets.QPushButton(self.centralwidget)
        self.ButtonExit.setObjectName("ButtonExit")
        self.gridLayout.addWidget(self.ButtonExit, 4, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 387, 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", "Main Menu"))
        self.ButtonRemove.setText(_translate("MainWindow", "Remove an album"))
        self.ButtonShowAll.setText(_translate("MainWindow", "Show all registerd albums"))
        self.ButtonShowSpecific.setText(_translate("MainWindow", "Show a specific album"))
        self.Text.setText(_translate("MainWindow", "Welcome to the MusicDatabase Version 2.1-2017"))
        self.label.setText(_translate("MainWindow", "Please select one of the options below."))
        self.ButtonAdd.setText(_translate("MainWindow", "Add an album"))
        self.ButtonExit.setText(_translate("MainWindow", "Exit"))
        self.label_2.setText(_translate("MainWindow", "Authors: N.S. Geldorp & H. Nahumury"))

Answer

eyllanesc picture eyllanesc · Apr 6, 2017

Qt Designer serves to generate the design of the view, pyuic5 converts that design into python code, this element must be used with logic, in addition it is recommended not to modify it.

first solution:

import sys

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ex = Ui_MainWindow()
    w = QtWidgets.QMainWindow()
    ex.setupUi(w)
    w.show()
    sys.exit(app.exec_())

Second Solution:

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent=parent)
        ui = Ui_MainWindow()
        ui.setupUi(self)


import sys

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

Third solution:

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent=parent)
        self.setupUi(self)



import sys

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