2012-01-11 346 views
3

我有一个PyQt4.9窗口,我希望打开或关闭半透明窗口。原因在于它有时会显示全尺寸声子视频控件,它在设置WA_TranslucentBackground属性时不起作用。 (由于Qt错误https://bugreports.qt.io/browse/QTBUG-8119将WA_TranslucentBackground关闭停止窗口重新绘制

我遇到的问题是,在WA_TranslucentBackground属性返回false后,窗口将不再重绘,所以它仍然显示与此相同的东西指向。有趣的是,点击事件仍然响应。

下面是一些示例代码。点击增加按钮,它将更新按钮文本。点击切换按钮,然后再次点击增量按钮,不再显示更新。点击退出按钮关闭窗口,显示事件仍在响应。

如果任何人有任何解决方案,解决方法或修复,我会很感激他们。谢谢。

import sys 

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class Settings(QWidget): 

    def __init__(self, desktop):  
     QWidget.__init__(self) 
     self.setAttribute(Qt.WA_TranslucentBackground, True) 
     self.setWindowFlags(Qt.FramelessWindowHint) 
     self.istransparent = True 
     self.count = 0 
     self.setWindowTitle("Transparent") 
     self.resize(300, 150) 
     self.incr_button = QPushButton("Increment") 
     toggle_button = QPushButton("Toggle Transparency") 
     exit_button = QPushButton("Exit") 
     grid = QGridLayout() 
     grid.addWidget(self.incr_button, 0, 0) 
     grid.addWidget(toggle_button, 1, 0) 
     grid.addWidget(exit_button, 2, 0) 
     self.setLayout(grid)   
     self.connect(toggle_button, SIGNAL("clicked()"), self.toggle) 
     self.connect(self.incr_button, SIGNAL("clicked()"), self.increment) 
     self.connect(exit_button, SIGNAL("clicked()"), self.close) 

    def increment(self): 
     self.count = self.count + 1 
     self.incr_button.setText("Increment (%i)" % self.count) 

    def toggle(self): 
     self.istransparent = not self.istransparent 
     self.setAttribute(Qt.WA_TranslucentBackground, self.istransparent) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    s = Settings(app.desktop()) 
    s.show() 
    sys.exit(app.exec_()) 

回答

2

尝试更换在__init__self.setAttribute(Qt.WA_TranslucentBackground, ...)电话和toggle用下面的方法。

def set_transparency(self, enabled): 
    if enabled: 
     self.setAutoFillBackground(False) 
    else: 
     self.setAttribute(Qt.WA_NoSystemBackground, False) 

    self.setAttribute(Qt.WA_TranslucentBackground, enabled) 
    self.repaint() 

测试上的PyQt-Py2.7 86 GPL-4.9-1(视窗7)