我想要做一个非常简单的qt界面,可是代码一切正常,他却报错:AttributeError: 'W' object has no attribute 'objectName如何解决?

我想要做一个非常简单的qt界面,可是代码一切正常,他却报错:
AttributeError: 'W' object has no attribute 'objectName'
我之前做过一个类似的,都没有问题。
代码如下:(出问题的)

from ui_window import Ui_MainWindow
from PySide2.QtWidgets import *
from PySide2.QtCore import *
import sys


class W(Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow
        self.setupUi(self)
        self.show()
        self.text = ""
        self.ui.pb_zz.clicked.connect(get_cb)

    def get_cb(self):
        self.text = self.cb_zz.currentText()
        print(self.text)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = W()
    sys.exit(app.exec_())

我想应该是父类没有被正确继承。
附件:(ui的py文件)

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.cb_zz = QComboBox(self.centralwidget)
        self.cb_zz.addItem("")
        self.cb_zz.addItem("")
        self.cb_zz.setObjectName(u"cb_zz")

        self.verticalLayout.addWidget(self.cb_zz)

        self.le_zz = QLineEdit(self.centralwidget)
        self.le_zz.setObjectName(u"le_zz")

        self.verticalLayout.addWidget(self.le_zz)

        self.lb_xg = QLabel(self.centralwidget)
        self.lb_xg.setObjectName(u"lb_xg")

        self.verticalLayout.addWidget(self.lb_xg)

        self.pb_zz = QPushButton(self.centralwidget)
        self.pb_zz.setObjectName(u"pb_zz")

        self.verticalLayout.addWidget(self.pb_zz)

        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.cb_zz.setItemText(0, QCoreApplication.translate("MainWindow", u"\u7ecf\u5178\u8bc5\u5492", None))
        self.cb_zz.setItemText(1, QCoreApplication.translate("MainWindow", u"\u81ea\u5b9a\u4e49\u8bc5\u5492\u8bed", None))

        self.le_zz.setText(QCoreApplication.translate("MainWindow", u"\u5982\u679c\u9009\u62e9\u7ecf\u5178\u8bc5\u5492\uff0c\u8bf7\u5728\u8fd9\u91cc\u8f93\u5165\u8bc5\u5492\u8bed", None))
        self.lb_xg.setText(QCoreApplication.translate("MainWindow", u"\u6548\u679c", None))
        self.pb_zz.setText(QCoreApplication.translate("MainWindow", u"\u751f\u6210\u5e76\u4fdd\u5b58", None))
    # retranslateUi

附件2:(完整错误信息)

Traceback (most recent call last):
  File "C:\Users\2387749550\Desktop\Python代码\高级版\诅咒创新版\alpha 0.5\诅咒创新版 alpha 0.5.py", line 25, in <module>
    window = W()
  File "C:\Users\2387749550\Desktop\Python代码\高级版\诅咒创新版\alpha 0.5\诅咒创新版 alpha 0.5.py", line 15, in __init__
    self.setupUi(self)
  File "C:\Users\2387749550\Desktop\Python代码\高级版\诅咒创新版\alpha 0.5\ui_window.py", line 18, in setupUi
    if not MainWindow.objectName():
AttributeError: 'W' object has no attribute 'objectName'

MainWindow.objectName
看看这里有没有objectName

参考GPT和自己的思路:

在 W 类的 init 方法中,第三行代码应该改为 self.ui = Ui_MainWindow(),而不是 self.ui = Ui_MainWindow,因为 Ui_MainWindow 是一个类,需要实例化成对象才能使用它的属性和方法。所以在后面使用 self.ui.xxx 时会出现 'W' object has no attribute 'objectName' 的错误提示,因为 W 类没有 objectName 这个属性,但是 Ui_MainWindow 类中有。修改完成后的代码如下所示:

class W(Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()  # 修改这里
        self.ui.setupUi(self)
        self.show()
        self.text = ""
        self.ui.pb_zz.clicked.connect(self.get_cb)

    def get_cb(self):
        self.text = self.ui.cb_zz.currentText()  # 修改这里,使用 self.ui.xxx 调用属性
        print(self.text)

参考GPT和自己的思路:

根据代码分析,可能问题出在第 9 行,因为在该行中调用了父类的初始化方法,但是实际上应该调用 Ui_MainWindow 类的初始化方法。因此建议将第 9 行修改为:

super(W, self).__init__()

同时,第 10 行中的代码应该被修改为:

self.ui = Ui_MainWindow()

这样可以创建一个 Ui_MainWindow 类的实例,然后将其赋给 self.ui 变量。

最后,建议将代码中的 get_cb 方法移到类的顶部,在 __init__ 方法的下方定义。这样可以保持代码的清晰度和易读性。

已解决 :
W类继承父类需要添加:
class W(QMainWindow,QWidget,Ui_MainWindow):