如何使基于QWidget的窗口具有透明背景?

时间:2014-12-16 03:48:18

标签: python qt pyqt transparent qwidget

示例代码是here,它运行如下,图像如下:

clock

主要策略是使用QBrush加载具有数字和其他内容的背景图像,图片最初具有透明背景。

但是如何使QWidget窗口具有透明背景却让我感到困惑。

2 个答案:

答案 0 :(得分:4)

在PyQt中,您需要使用按位OR运算符|将标志添加到所有现有窗口标志,以使其工作:

window.setWindowFlags(window.windowFlags() | QtCore.Qt.FramelessWindowHint)

然后呢 window.setAttribute(QtCore.Qt.WA_TranslucentBackground)

请记住在设置标志后调用show()方法。在这里引用文档:

注意:此函数在更改窗口标志时调用setParent(),导致窗口小部件被隐藏。您必须致电show()以再次显示小部件..

在按位运算符上:https://wiki.python.org/moin/BitwiseOperators

希望这很有用。

编辑:删除了一些不正确的信息,感谢@ ekhumoro的评论。

答案 1 :(得分:1)

如果您需要一个具有透明背景的窗口(基于QWidget),您可以根据我的知识实现这一点,如果您还使窗口无框架。

以下示例执行此操作。重要的是设置窗口标记FramelessWindowHint和设置属性WA_TranslucentBackground

from PySide import QtCore, QtGui

app = QtGui.QApplication([])

window = QtGui.QWidget()
window.setWindowFlags(QtCore.Qt.FramelessWindowHint)
window.setAttribute(QtCore.Qt.WA_TranslucentBackground)
window.show()

layout = QtGui.QVBoxLayout(window)
button = QtGui.QPushButton('Exit')
button.clicked.connect(app.quit)
layout.addWidget(button)

app.exec_()

仅显示独立按钮。