我有一个QPixmap
子类,附加了类方法make
:
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
个实例?
答案 0 :(得分:1)
从Screenshot
继承的所有方法QPixmap
都会返回QPixmap
,因此您需要显式创建并返回Screenshot
的实例。
唯一真正的问题是避免低效复制。但是,QPixmap
提供了一个非常快速的复制构造函数来做到这一点,所以你需要的就是这样:
class Screenshot(QtGui.QPixmap):
@classmethod
def make(cls):
...
image = cls.grabWindow(...)
return cls(image)