PyQt - 透明背景

5

我想让窗口的背景透明。但是在放置在窗口上的小部件下面,我看到了桌面图像的一部分。 现在我在构造函数中有以下代码:

    self.setFocusPolicy(Qt.StrongFocus)
    self.setAttribute(Qt.WA_QuitOnClose,True)

    self.setBackgroundRole(QtGui.QPalette.Base)
    self.setAttribute(Qt.WA_NoSystemBackground)
3个回答

3
我刚刚发现了这个链接:Creating Translucent Windows
自Qt 4.5以来,已经可以在支持合成的窗口系统上创建具有半透明区域的窗口。
要在顶级小部件中启用此功能,请使用setAttribute()设置其Qt::WA_TranslucentBackground属性,并确保在您希望部分透明的区域中使用非不透明颜色进行背景绘制。
PyQt仍然是Qt 4.4,也许这就是问题所在。

PyQt中没有Qt :: WA_TranslucentBackground属性 =(有什么想法吗? - Max Frai
+1:这就是gs所说的。你不能这样做,因为PyQt是针对Qt 4.4创建的,所以你要寻找的半透明特性还不可用。 - user44484

2
尝试将此应用于您的小部件:

widget.setAutoFillBackground(True)

我认为你也可以在Qt Designer中设置它。

我也尝试过绘制透明的PNG图像...但是它也不起作用 =(. - Max Frai
如果您在主窗口上使用透明背景并在子小部件上使用不透明,则此方法将无效。 - user44484

2
进一步回答gs的问题,这个常见问题解释了为什么(在Qt 4.5之前)你无法实现这个功能: FAQ链接: 引用:
没有直接支持部分透明度的功能,其中窗口是透明的,但其上的小部件不是Qt。
请记住,PyQt的最新版本是针对Qt 4.4创建的,因此不支持您想要的半透明窗口。gs的另一个答案,关于setAutoFillBackground(True),如果您将主窗口的背景颜色设置为任何非透明颜色,则可以使用该方法。
此外,请查看Qt.WA_NoSystemBackground的文档,它说您不能依赖到目前为止所拥有的透明效果: Qt::WA_NoSystemBackground 引用:
表示该小部件没有背景,即当小部件接收绘制事件时,背景不会自动重绘。注意:与WA_OpaquePaintEvent不同,新暴露的区域永远不会被填充背景(例如,第一次显示窗口后,用户可以“穿过”它,直到应用程序处理绘制事件)。这由小部件的作者设置/清除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接