PyQt4.QtWebKit + 背景透明

2 投票
2 回答
2774 浏览
提问于 2025-04-16 15:09

如果你使用的是合成窗口管理器,这段代码会让你得到一个透明的窗口:

import PyQt4.QtGui
a = PyQt4.QtGui.QApplication([])
import PyQt4.QtCore
import PyQt4.QtWebKit
w = PyQt4.QtWebKit.QWebView()
w.setAttribute(PyQt4.QtCore.Qt.WA_TranslucentBackground)
w.show()
a.exec_()

但是这段代码就不会有透明窗口:

import PyQt4.QtGui
a = PyQt4.QtGui.QApplication([])
import PyQt4.QtCore
import PyQt4.QtWebKit
w = PyQt4.QtWebKit.QWebView()
w.setAttribute(PyQt4.QtCore.Qt.WA_TranslucentBackground)
w.page().currentFrame().documentElement().setInnerXml("text")
w.show()
a.exec_()

我想要让文字漂浮在背景上……这样做可以吗?

2 个回答

0

这里的问题是懒惰实例化。最开始,WebKit 视图并没有被创建,所以你看到的是透明的背景。当你访问 w.page() 时,WebKit 视图才真正被创建,这时就会出现默认的白色背景。我不知道有没有办法在 WebKit 视图内部实现透明效果;可能有办法,但那不是“正常的网页操作”。比如,w.page().currentFrame().documentElement().setInnerXml('<style>html,body{background:transparent}</style>') 这个方法并没有用:透明的上面还是会显示默认的白色背景。

可能的帮助:使用 WebKit 是否可以在透明背景上渲染网页内容?

0

这段代码看起来可以正常工作:

from PyQt4 import QtGui, QtWebKit
from PyQt4.QtCore import Qt
a = QtGui.QApplication([])
view = QtWebKit.QWebView()
view.setAttribute(Qt.WA_TranslucentBackground)
# Works with and without that following line
view.setAttribute(Qt.WA_OpaquePaintEvent, False)
page = view.page()
palette = page.palette()
palette.setBrush(QtGui.QPalette.Base, Qt.transparent)
page.setPalette(palette)
page.currentFrame().documentElement().setInnerXml("text")
view.show()
a.exec_()

来源:http://labs.qt.nokia.com/2009/06/30/transparent-qwebview-or-qwebpage/

撰写回答