52 lines
1.2 KiB
Python
52 lines
1.2 KiB
Python
import io
|
|
import logging
|
|
|
|
from PIL import Image
|
|
|
|
from pyscreenshot.plugins.backend import CBackend
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
# based on qt4 backend
|
|
|
|
app = None
|
|
|
|
|
|
class Qt5GrabWindow(CBackend):
|
|
name = "pyqt5"
|
|
|
|
# qt backends have conflict with each other in the same process.
|
|
|
|
def grab_to_buffer(self, buff, file_type="png"):
|
|
from PyQt5 import Qt, QtGui, QtWidgets # type: ignore
|
|
|
|
QApplication = QtWidgets.QApplication
|
|
QBuffer = Qt.QBuffer
|
|
QIODevice = Qt.QIODevice
|
|
QScreen = QtGui.QScreen
|
|
|
|
global app
|
|
if not app:
|
|
app = QApplication([])
|
|
qbuffer = QBuffer()
|
|
qbuffer.open(QIODevice.ReadWrite)
|
|
QScreen.grabWindow(
|
|
QApplication.primaryScreen(), QApplication.desktop().winId()
|
|
).save(qbuffer, file_type)
|
|
buff.write(qbuffer.data())
|
|
qbuffer.close()
|
|
|
|
def grab(self, bbox=None):
|
|
strio = io.BytesIO()
|
|
self.grab_to_buffer(strio)
|
|
strio.seek(0)
|
|
im = Image.open(strio)
|
|
if bbox:
|
|
im = im.crop(bbox)
|
|
return im
|
|
|
|
def backend_version(self):
|
|
from PyQt5 import Qt
|
|
|
|
return Qt.PYQT_VERSION_STR
|