我有一个PyQt4.9的窗口,我想要在其中切换半透明效果。原因是有时会显示一个全屏的phonon视频控制器,当设置WA_TranslucentBackground属性时无法使用(由于Qt bug https://bugreports.qt.io/browse/QTBUG-8119)。
我的问题是,在将WA_TranslucentBackground属性从true改回false后,窗口将不再重新绘制,因此它将一直停留在同一点上显示相同的内容。有趣的是,点击事件仍然会响应。
以下是一些示例代码。单击增量按钮,它会更新按钮文本。单击切换按钮,然后再次单击增量按钮,更新将不再显示。单击退出按钮关闭窗口,显示事件仍在响应。
如果有人有任何解决方案、变通方法或修复方法,我将不胜感激。谢谢。
我的问题是,在将WA_TranslucentBackground属性从true改回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_())