from abc import ABC, abstractmethod
from PyQt5.QtWidgets import QMainWindow
class _ControlGUI(QMainWindow, ABC):
pass
上面非常简单的代码引发了一个我不太清楚的错误
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
我的目标是用强制结构/属性定义基类_ControlGUI
;然后定义从中继承的多个具体类,以及附加的功能/属性。所有这些具体类都是小型GUI,因此从QMainWindow
继承,因此我认为最好让抽象类直接从QMainWindow
继承。然而,这似乎是不可能的
这个问题的最佳设计和解决方案是什么?我目前的想法是定义没有QMainWindow
的抽象类,并让所有具体类从_ControlGUI
和QMainWindow
继承
正如错误所说,您必须创建一个元类,它是所涉及类的每个元类的子类
PyQT小部件的元类可能不是设计用来与其他元类协同工作的——这将是运气的问题。ABC的元类
abc.ABCMeta
(为了便于说明,我在下面将其称为type(ABC)
)如果更适合协同继承,som,那么在派生元类时将其放在首位将使您有更好的机会使事情实际工作。(即,除其他外,它将在其方法中使用super()
调用,而不是硬编码对type.<method>
的调用)一旦获得了派生元类,只需在继承基类上使用它。由于所有示例都是一行代码,检查结果很有趣,因此我只在交互式环境中编写了一些东西:
作为旁注,不管Qt文档怎么说(以及其他图形工具包),使用小部件的子类来创建应用程序可能是一大难题。如果您只是实例化这些小部件,并将它们作为一个普通类中的属性引用,该类只继承与您的项目相关的内容,那么与从
QMainWindow
开始继承相比,您可能会有一个更好的旅程相关问题 更多 >
编程相关推荐