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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/43260595/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 22:43:41  来源:igfitidea点击:

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

pythonpyqtpyqt5qt-designerqmainwindow

提问by That One

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

我仍在为我的数据库开发 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'

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

我对 PyQt 一无所知,所以我不明白问题是什么。

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

回答by eyllanesc

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.

Qt Designer 用于生成视图的设计,pyuic5 将该设计转换为 python 代码,此元素必须与逻辑一起使用,另外建议不要修改它。

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