我正试图在linux上使用python脚本截取curent窗口的截图。
我有一个脚本可以截取整个屏幕的截图:
import sys
from PyQt4.QtGui import QPixmap, QApplication
from datetime import datetime
date = datetime.now()
filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
app = QApplication(sys.argv)
QPixmap.grabWindow(QApplication.desktop().winId()).save(filename, 'jpg')
但是想要只有选定的窗口。我知道问题来自grabWindow。但我不知道如何解决它。
答案 0 :(得分:9)
简单地替换
QApplication.desktop()
使用您想截取屏幕截图的小部件。
import sys
from PyQt4.QtGui import *
from datetime import datetime
date = datetime.now()
filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
app = QApplication(sys.argv)
widget = QWidget()
# set up the QWidget...
widget.setLayout(QVBoxLayout())
label = QLabel()
widget.layout().addWidget(label)
def shoot():
p = QPixmap.grabWindow(widget.winId())
p.save(filename, 'jpg')
label.setPixmap(p) # just for fun :)
print "shot taken"
widget.layout().addWidget(QPushButton('take screenshot', clicked=shoot))
widget.show()
app.exec_()
答案 1 :(得分:5)
自Qt5起,grabWindow
和grabWidget
已过时(请参阅Obsolete Members for QPixmap)
相反,您可以使用QWidget.grab()
p=widget.grab()
答案 2 :(得分:0)
或者,而不是
p = QPixmap.grabWindow(widget.winId())
您也可以使用
p = QPixmap.grabWidget(widget)
答案 3 :(得分:0)
PyQt5 更新
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QPixmap, QScreen
from datetime import datetime
date = datetime.now()
filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
app = QApplication(sys.argv)
QScreen.grabWindow(app.primaryScreen(),
QApplication.desktop().winId()).save(filename, 'png')