有没有办法在pyqt5或qt5中拍摄窗口的截图?

2024-09-27 09:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

#!/usr/bin/env python3
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QWidget
import sys

app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
widget = QWidget()

screenshot = screen.grabWindow(0, 0, 0, 100, 100)
screenshot.save('shot', 'jpg')

我怎样才能用这个来打开窗户?它只获得屏幕的一部分:

screenshot = screen.grabWindow( widget.winId() )

我需要一个跨平台的方法


Tags: fromimportenvbinusrsyswidgetscreen
1条回答
网友
1楼 · 发布于 2024-09-27 09:29:54

参考:http://doc.qt.io/qt-5/qscreen.html#grabWindow

你说你需要一个窗口的截图,因此

screenshot = screen.grabWindow(0, 0, 0, 100, 100)

在这里不是合适的调用,因为它捕获整个屏幕,并根据最后4个参数进行裁剪。(100个参数是宽度和高度)

screenshot = screen.grabWindow( widget.winId() )

捕获小部件窗口。然而,您在这次调用中没有得到预期结果的原因可能是您没有创建一个可靠的小部件和/或小部件没有显示。尝试以下示例,在单击按钮之前,确保应用程序位于主屏幕上

from PyQt5 import QtWidgets
import sys

app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()

grab_btn=QtWidgets.QPushButton('Grab Screen')
def click_handler():
    screen = QtWidgets.QApplication.primaryScreen()
    screenshot = screen.grabWindow( w.winId() )
    screenshot.save('shot.jpg', 'jpg')
    w.close()

grab_btn.clicked.connect(click_handler)

layout = QtWidgets.QVBoxLayout()
layout.addWidget(grab_btn)
w.setLayout(layout)
w.show()

sys.exit(app.exec_())

我已经在Windows上测试过了

相关问题 更多 >

    热门问题