2012-11-13 3 views
2

PyQt를 사용하지 않은 경우 창 뒤에있는 화면을 캡처하여 의사 투명 창을 만들고 싶습니다. 다음 코드는 스크린 샷을 찍습니다 :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_() 

그러나 위젯이 있지만 화면 자체에 창이 나타납니다. 어떻게 이것을 피할 수 있습니까?

+3

'widget.hide()'와 라벨의 Pixmap을 설정하는 사이에 ('time.sleep()') 잠깐 기다려 주시겠습니까? 스크린 샷을 찍을 때 위젯이 아직 숨겨져 있지 않은 것 같습니다. 또는'widget.setAttribute (Qt.WA_TranslucentBackground, True)'를 사용하여 실제 투명성을 시도 했습니까? – Junuxx

+0

감사합니다. 실제로 위젯을 추가 한 후 0.3 초의 수면을 추가하면 작동합니다(). 그러나 얼마나 오래 기다릴 수 있습니까? 숨기기 이벤트가 끝날 때까지 기다릴 수있는 방법이 있습니까? –

답변

0

알 수없는 시간 동안자는 대신 app.processEvents()도 작동해야한다고 생각합니다. 계속하기 전에 Qt 앱이 위젯을 숨기는 것과 같이 진행중인 작업을 완료해야합니다. This과 관련된 질문은 답변 중 하나에서 설명합니다.

+0

processEvents()가 오래 지속되지 않습니다. 나는 self.isHidden() == False : sleep (0.1) 동안 시도했지만, 이것 또한 충분히 오래 기다리지 않는다. 창은 조금 깜박이지만 스크린 샷에는 바탕 화면이 표시되지 않습니다. –