2011-04-05 211 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?