PyQT的伪透明度

时间:2012-11-13 11:33:24

标签: python pyqt transparency screenshot

我想通过截取窗口后面的内容来创建一个伪透明窗口,如果它不在那里使用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(),但窗口本身会出现在屏幕截图中。我怎么能避免这个?

2 个答案:

答案 0 :(得分:1)

这是我写的,基本上可以满足您的需求。它使用可调整大小的Qt窗口对背后的内容进行截图。到目前为止,此脚本仅适用于1个屏幕。分为other-site.exampleQScreen可能会给您答案,以使其具有可扩展性。

QApplication

答案 1 :(得分:0)

我认为app.processEvents()也应该有效,而不是在不知不觉的时间内睡觉。这迫使Qt应用程序完成持续的工作 - 比如隐藏小部件 - 然后再继续。 This是一个相关的问题,其中一个答案中讨论了这个问题。