gpt4 book ai didi

python - 使用 PyQT 伪透明

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:22 25 4
gpt4 key购买 nike

我想创建一个伪透明窗口,方法是使用 PyQt 截取窗口后面的内容的屏幕截图。以下代码截屏:

#!/usr/bin/python3

from PyQt4.QtGui import *

app = QApplication([])
widget = QWidget()
widget.setLayout(QVBoxLayout())
label = QLabel()
widget.layout().addWidget(label)

def shoot():
geometry = widget.geometry()
widget.hide()
label.setPixmap(QPixmap.grabWindow(QApplication.desktop().winId(), x = geometry.x(), y = geometry.y(), height = geometry.height(), width = geometry.width())
widget.show()

widget.layout().addWidget(QPushButton('Screenshot', clicked = shoot))
widget.show()
app.exec_()

但是尽管有 widget.hide(),窗口本身还是出现在屏幕截图上。我怎样才能避免这种情况?

最佳答案

这是我写的东西,基本上可以满足您的需求。它使用可调整大小的 Qt 窗口对其背后的任何内容进行屏幕截图。到目前为止,此脚本仅适用于 1 个屏幕。深入研究 QScreenQApplication 可能会给您答案以使其可扩展。

import sys
import io
from PySide2.QtWidgets import QApplication, QWidget, QPushButton
from PySide2.QtCore import Qt, QBuffer
from PIL import Image


class Screenshooter(QWidget):
def __init__(self, parent):
super().__init__()
self.parent = parent
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.resize(640, 480)
self.snapBtn = QPushButton("Capture", self)
self.snapBtn.clicked.connect(self.take_screenshot)
self.show()

def take_screenshot(self):
geometry = self.geometry()
screen = self.parent.screenAt(self.pos())
full_screenshot = screen.grabWindow(
0,
geometry.x(),
geometry.y(),
geometry.width(),
geometry.height()
)
full_image = full_screenshot.toImage()
buffer = QBuffer()
buffer.open(QBuffer.ReadWrite)
full_image.save(buffer, 'PNG')
im = Image.open(io.BytesIO(buffer.data()))
im.show()
buffer.close()


if __name__ == "__main__":
app = QApplication(sys.argv)
widget = Screenshooter(app)
sys.exit(app.exec_())

关于python - 使用 PyQT 伪透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com