繁体   English   中英

PyQt4 - QWidget保存为图像

[英]PyQt4 - QWidget save as image

我正在尝试使用Python以编程方式将PyQt4中的QWidget保存为图像(任何格式都可以 - PNG,PDF,JPEF,GIF等)

我认为这将非常简单,但实际上我无法在网上找到任何关于它的内容。 有人能指出我正确的方向吗?

要清楚,我正在努力做到这一点

gui = <SOME QMainWindow>
gui.show()  # this displays the gui. it's useful, but what i need is to save the image
gui.save("image.png")    ## How do I do this?  

您可以使用QPixmap.grabWindow()方法执行此操作。

来自文档:

抓取窗口窗口的内容并从中创建一个像素图。 返回像素图。

参数(x,y)指定窗口中的偏移量,而(w,h)指定要复制的区域的宽度和高度。

如果w为负数,则该函数会将所有内容复制到窗口的右边框。 如果h为负数,则该函数会将所有内容复制到窗口底部。

请注意,grabWindow()从屏幕上抓取像素,而不是从窗口抓取像素。 如果在您抓取的窗口上部分或全部有另一个窗口,您也可以从上面的窗口获取像素。

另请注意,通常不会抓取鼠标光标。

我们使用窗口标识符而不是QWidget的原因是为了能够抓取不属于应用程序,窗口系统框架等的窗口。

警告:一般来说,抓住屏幕外的区域并不安全。 这取决于底层窗口系统。

警告:仅限X11:如果窗口与根窗口的深度不同,而另一个窗口部分或完全遮挡了您抓取的窗口,则不会从上面的窗口获取像素。 像素图中模糊区域的竞争是未定义的和未初始化的。

示例代码:

import sys
from PyQt4.QtGui import *

filename = 'Screenshot.jpg'
app = QApplication(sys.argv)
widget = QWidget()
widget.setLayout(QVBoxLayout())
label = QLabel()
widget.layout().addWidget(label)

def take_screenshot():
    p = QPixmap.grabWindow(widget.winId())
    p.save(filename, 'jpg')

widget.layout().addWidget(QPushButton('take screenshot', clicked=take_screenshot))

widget.show()
app.exec_()

这将生成一个如下所示的窗口:

应用程序UI

单击该按钮时,它将在当前目录中创建名为Screenshot.jpg的文件。 所述图像将如下所示(注意窗框缺失):

截图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM