我尝试使窗口的背景透明。但是在它上面的小部件下,我看到了我的桌面图像的一部分。现在我在构造函数中有这个:
self.setFocusPolicy(Qt.StrongFocus) self.setAttribute(Qt.WA_QuitOnClose,True) self.setBackgroundRole(QtGui.QPalette.Base) self.setAttribute(Qt.WA_NoSystemBackground)
我尝试使窗口的背景透明。但是在它上面的小部件下,我看到了我的桌面图像的一部分。现在我在构造函数中有这个:
self.setFocusPolicy(Qt.StrongFocus) self.setAttribute(Qt.WA_QuitOnClose,True) self.setBackgroundRole(QtGui.QPalette.Base) self.setAttribute(Qt.WA_NoSystemBackground)
我刚刚发现了这个:
创建半透明窗口
从 Qt 4.5 开始,可以在支持合成的窗口系统上创建具有半透明区域的窗口。
要在顶级小部件中启用此功能,请使用 setAttribute() 设置其 Qt::WA_TranslucentBackground 属性,并确保在您希望部分透明的区域中使用非不透明颜色绘制其背景。
PyQt 仍然是 Qt 4.4,也许这就是问题所在。
试试这个为你的小部件:
widget.setAutoFillBackground(True)
我想你也可以在 Qt Designer 中设置它。
除了 gs 的回答,此常见问题解答解释了为什么(在 Qt 4.5 之前)您无法实现此目的:
不直接支持部分透明,其中窗口是透明的,并且窗口上的小部件不在 Qt 中。
请记住,PyQt 的最新版本是针对 Qt 4.4 创建的,因此不支持您想要的半透明窗口。gs 的另一个答案,关于 setAutoFillBackground(True) 如果您将主窗口的背景颜色设置为透明以外的任何颜色,则将起作用。
另外,请参阅 Qt.WA_NoSystemBackground 的文档,它说您不能依赖您迄今为止所拥有的透明效果:
表示小部件没有背景,即小部件接收到绘制事件时,不会自动重新绘制背景。注意:与 WA_OpaquePaintEvent 不同,新暴露的区域永远不会被背景填充(例如,在第一次显示窗口后,用户可以“透过”它看到,直到应用程序处理绘制事件)。这是由小部件的作者设置/清除的。