我有一个带有其他类方法QPixmapmake子类:

class Screenshot(QtGui.QPixmap):
    @classmethod
    def make(cls):
        desktop_widget = QtGui.QApplication.desktop()
        image = cls.grabWindow(
            desktop_widget.winId(), rect.x(), rect.y(), rect.width(), rect.height())
        import ipdb; ipdb.set_trace()
        image.save()
        return image


当我调用Screenshot.make()时,传递了正确的类cls,但是通过cls.grabWindow创建的实例不是Screenshot

ipdb> ...py(30)make()
     29         import ipdb; ipdb.set_trace()
---> 30         image.save()
     31         return image

ipdb> cls
<class 'viewshow.screenshot.Screenshot'>
ipdb> image
<PyQt4.QtGui.QPixmap object at 0x7f0f8c4a9668>


甚至更短:

ipdb> Screenshot.grabWindow(desktop_widget.winId())
<PyQt4.QtGui.QPixmap object at 0x7f0f8154c438>


如何获取Screenshot实例?

最佳答案

ScreenshotQPixmap继承的所有方法都将返回QPixmap,因此您需要显式创建并返回Screenshot的实例。

唯一的实际问题是避免复制效率低下。但是,QPixmap为此提供了一个非常快速的复制构造函数,因此您所需要的只是以下内容:

class Screenshot(QtGui.QPixmap):
    @classmethod
    def make(cls):
        ...
        image = cls.grabWindow(...)
        return cls(image)

关于python - 转换QObject子类实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30966200/

10-12 16:51