AttributeError:' Ui_MainWindow'对象没有属性' setCentralWidget' PyQt5

时间:2017-04-06 16:17:49

标签: python pyqt pyqt5 qt-designer qmainwindow

我仍在使用我的数据库的GUI,现在我有一个不同的错误:

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'

我不了解PyQt的事情,所以我不明白问题是什么。

代码是: (这是编辑后的版本,Raw Version发布于下方)

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

有没有人看到这个问题?

-Natan

发布原始转换:

# -*- 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"))

每个人,如果你贬低,请留下理由

1 个答案:

答案 0 :(得分:16)

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