5

我尝试使窗口的背景透明。但是在它上面的小部件下,我看到了我的桌面图像的一部分。现在我在构造函数中有这个:

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

    self.setBackgroundRole(QtGui.QPalette.Base)
    self.setAttribute(Qt.WA_NoSystemBackground)
4

3 回答 3

3

我刚刚发现了这个

创建半透明窗口

从 Qt 4.5 开始,可以在支持合成的窗口系统上创建具有半透明区域的窗口。

要在顶级小部件中启用此功能,请使用 setAttribute() 设置其 Qt::WA_TranslucentBackground 属性,并确保在您希望部分透明的区域中使用非不透明颜色绘制其背景。

PyQt 仍然是 Qt 4.4,也许这就是问题所在。

于 2009-04-20T22:32:24.927 回答
2

试试这个为你的小部件:

widget.setAutoFillBackground(True)

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

于 2009-04-20T21:31:03.017 回答
2

除了 gs 的回答,此常见问题解答解释了为什么(在 Qt 4.5 之前)您无法实现此目的:

常见问题链接:

不直接支持部分透明,其中窗口是透明的,并且窗口上的小部件不在 Qt 中。

请记住,PyQt 的最新版本是针对 Qt 4.4 创建的,因此不支持您想要的半透明窗口。gs 的另一个答案,关于 setAutoFillBackground(True) 如果您将主窗口的背景颜色设置为透明以外的任何颜色,则将起作用。

另外,请参阅 Qt.WA_NoSystemBackground 的文档,它说您不能依赖您迄今为止所拥有的透明效果:

Qt::WA_NoSystemBackground

表示小部件没有背景,即小部件接收到绘制事件时,不会自动重新绘制背景。注意:与 WA_OpaquePaintEvent 不同,新暴露的区域永远不会被背景填充(例如,在第一次显示窗口后,用户可以“透过”它看到,直到应用程序处理绘制事件)。这是由小部件的作者设置/清除的。

于 2009-04-22T00:22:19.087 回答