奇怪的是,虽然我在PyQt应用程序中成功添加了包含透明度的背景,但大部分图像仍为黑色。
from PyQt4.QtGui import *
import sys
class BackgroundIssue(QMainWindow):
def __init__(self):
super(BackgroundIssue, self).__init__()
def resizeEvent(self, event):
pixmap = QPixmap("res/background.png")
region = QRegion(pixmap.mask())
self.setMask(pixmap.mask())
def main():
app = QApplication(sys.argv)
window = BackgroundIssue()
palette = QPalette()
palette.setBrush(QPalette.Background,QBrush(QPixmap("res/background.png")))
window.setPalette(palette)
window.setWindowTitle("Partially Black Background Image")
window.show()
return app.exec_()
if __name__ == '__main__':
main()
结果为this,而实际图片显示为this。 (请注意,第一个链接中的白色是正确运行的透明度。)
我已经看了一切并且对此嗤之以鼻并尝试了十几种不同的解决方案。任何人都可以至少解释这种现象叫做什么?
谢谢!
答案 0 :(得分:1)
我终于解决了这个问题:答案实际上在于覆盖。通过将QtGui.Qt.WA_TranslucentBackground
设置为True然后在其中包含的窗口小部件中设置背景,主窗口绘制桌面背景,然后窗口小部件中的透明图像从父窗口绘制。似乎不可能让图像直接继承桌面的透明度并将背景绘制为不透明度。对于任何具有部分不透明度的图像,似乎需要一层抽象。
最终代码:
from PyQt4 import QtGui, QtCore
import sys
class BackgroundWidget(QtGui.QWidget):
def __init__(self):
super(BackgroundWidget, self).__init__()
palette = QtGui.QPalette()
palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(QtGui.QPixmap("res/img/background.png")))
self.setAutoFillBackground(True)
self.setPalette(palette)
self.show()
class BackgroundIssue(QtGui.QMainWindow):
def __init__(self):
super(BackgroundIssue, self).__init__()
self._widget = BackgroundWidget()
self.setCentralWidget(self._widget)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
self.resize(1002, 660)
self.setWindowTitle("Partially Black Background Image")
self.show()
def resizeEvent(self, event):
pixmap = QtGui.QPixmap("res/background.png")
region = QtGui.QRegion(pixmap.mask())
self.setMask(pixmap.mask())
def main():
app = QtGui.QApplication(sys.argv)
window = BackgroundIssue()
sys.exit(app.exec_())
if __name__ == '__main__':
main()