【发布时间】:2012-11-13 11:33:23
【问题描述】:
我想通过使用 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(),但窗口本身出现在屏幕截图上。我怎样才能避免这种情况?
【问题讨论】:
-
您是否尝试过在
widget.hide()和设置标签的像素图之间等待(time.sleep())一段时间?截屏时,小部件可能尚未隐藏。或者,您是否尝试过使用widget.setAttribute(Qt.WA_TranslucentBackground, True)的实际透明度? -
谢谢,如果我在 widget.hide() 之后添加 0.3 秒的睡眠,它实际上可以工作。但是我怎么知道要等多久呢?有没有办法简单地等到隐藏事件完成?
标签: python pyqt transparency screenshot