PyQt - 透明背景

时间:2009-04-20 21:24:15

标签: background pyqt transparent

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

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

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

3 个答案:

答案 0 :(得分:4)

我刚刚找到this

  

创建半透明Windows

     

从Qt 4.5开始,就有可能   创建半透明的窗户   窗口系统上支持的区域   合成

     

在顶级中启用此功能   小部件,设置它   Qt :: WA_TranslucentBackground属性   使用setAttribute()并确保   它的背景是涂上了   您所在地区的非不透明颜色   希望部分透明。

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

答案 1 :(得分:2)

试试这个小工具:

widget.setAutoFillBackground(True)

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

答案 2 :(得分:2)

除了gs的回答,这个常见问题解释了为什么(在Qt 4.5之前)你无法做到这一点:

FAQ Link:

  

没有直接支持部分   透明度,窗口在哪里   透明和它上面的小部件   不在Qt。

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

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

Qt::WA_NoSystemBackground

  

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