2011-04-05 216 views
2

如果你有一个复合窗口管理器,这会给你一个透明的窗口:PyQt4.QtWebKit +背景透明度

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_() 

我想能够将文本浮在背景上......这可能吗?

回答

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/

0

这里的问题是懒惰的实例化。最初,WebKit视图并未实例化,因此您可以获得透明背景。只要您访问w.page(),WebKit视图就会实际进行实例化,所以会出现默认的白色背景。我不知道从WebKit视图内部获得透明度的任何方式;可能有办法,但它不是“正常的网络内容”。例如,w.page().currentFrame().documentElement().setInnerXml('<style>html,body{background:transparent}</style>')不起作用:在透明度下呈现白色的默认值。

可能的帮助:Is it possible to render web content over a clear background using WebKit?