Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt4-QWidget另存为图像_Python_Pyqt4 - Fatal编程技术网

Python PyQt4-QWidget另存为图像

Python PyQt4-QWidget另存为图像,python,pyqt4,Python,Pyqt4,我正在尝试使用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

我正在尝试使用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?  
gui=
gui.show()#显示gui。这很有用,但我需要的是保存图像
gui.save(“image.png”)##我该怎么做?

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

从文档中:

抓取窗口的内容并从中生成一个pixmap。 返回pixmap

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

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

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

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

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

警告:抓取屏幕外的区域通常不安全。 这取决于底层窗口系统

警告:仅X11:如果窗口与根窗口的深度不同 而另一扇窗户部分或完全遮住了你抓到的那扇, 您将无法从覆盖窗口中获取像素。世界杯的比赛 pixmap中的模糊区域未定义且未初始化

示例代码:

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_()
这将生成一个如下所示的窗口:

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


我以前从未这样做过,但也许这个问题会引导您走向正确的方向(请注意,这是Qt4 C++):