我正在研究PyQt5应用程序,并试图了解为什么我不能在从copy.copy继承的类上使用QObject
这是我的Switcher类的标题:

class Switcher(QObject):
    def __init__(self):
        QObject.__init__(self)
        self.modified = True
        self.integer_sliders = []
        self.float_sliders = []
        self.checkboxes = []
        self.drop_downs = []
(...)


我需要创建两个Switcher类的副本,并为此使用copy

switch = Switcher()
new_switch = copy.copy(switch)


但是,这会抛出一个RuntimeError

RuntimeError: super-class __init__() of type Switcher was never called


为什么会发生这种情况,并且可以复制Switcher对象?

最佳答案

copy所能做的就是为C ++对象创建python包装器的浅表副本。这是因为它是python函数,因此对构成包装器的Qt对象一无所知。

但是,即使它确实知道基础对象,也仍然无法复制它,因为Qt不会为QObject提供复制构造函数。因此,您所要求的完全没有任何意义。

无论如何,我想您实际上并不需要复制QObject本身。您真正需要做的是复制它的某些数据属性-为此,您可以轻松编写自己的方法。

10-06 05:18
查看更多