【问题标题】:TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) [closed]TypeError:元类冲突:派生类的元类必须是(非严格)[关闭]
【发布时间】:2021-11-23 02:19:53
【问题描述】:

我的代码有什么问题?我正在尝试将我的 UI 文件与 python 连接。我几乎可以确定一切,但我无法定义错误是什么。

from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUiType

ui = loadUiType('main.ui')


class MainApp(QMainWindow, ui):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUI(self)


def main():
    app = QApplication(sys.argv)
    window = MainApp()
    window.show()
    app.exex_()


if __name__ == '__main__':
    main()

【问题讨论】:

  • 这个错误是因为你没有正确使用你的ui类并且__init__中也有一个错字。更改为ui = loadUiType('main.ui')[0]self.setupUi(self)

标签: python user-interface pyqt5 qt-designer uic


【解决方案1】:

我不确定 UI 文件加载的“继承”样式应该如何工作。但是,这应该可以满足您的要求:

from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.uic import loadUi


class MainApp(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        loadUi('main.ui', self)

def main():
    app = QApplication(sys.argv)
    window = MainApp()
    window.show()
    app.exec_()


if __name__ == '__main__':
    main()

【讨论】:

  • 这不会解决问题,因为它与 OP 的示例完全相同(仅使用不同的语法)。但是,它至少会给出一个不那么神秘的错误消息:即TypeError: Wrong base class of toplevel widget
  • @ekhumoro 它在我的机器上运行良好。如果遇到上述错误,很可能是你的UI文件无效(可能是widget类错误,需要匹配MainApp
  • 那是因为您没有尝试重现实际问题。请参阅我对 OPs 问题的评论。
  • @ekhumoro 你确定吗?我用一个 QMainWindow 创建了一个 UI,它与 MainApp 的类匹配。但是运行 OP 的代码仍然失败,而我的代码可以工作。
  • OP 的示例中有一些拼写错误,这令人困惑。一旦这些问题得到解决,其他问题就会消失。
猜你喜欢
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 2017-12-29
  • 2018-09-09
  • 2019-04-26
  • 2019-11-28
  • 2013-01-18
相关资源
最近更新 更多