Python QWebView未加载外部CSS
我使用QWebView来显示一些内容,我想使用自定义CSS来美化输出。我发现我可以使用Python QWebView未加载外部CSS,python,qt,pyqt,qwebview,pyside,Python,Qt,Pyqt,Qwebview,Pyside,我使用QWebView来显示一些内容,我想使用自定义CSS来美化输出。我发现我可以使用QWebSettings.setUserStyleSheetUrl()方法将自己的CSS加载到视图中。.css文件与我的主程序位于同一目录中 self.webview = QWebView(MainWindow) self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile("myCustom.css")) 但是,当我使用setHtml()将内
QWebSettings.setUserStyleSheetUrl()
方法将自己的CSS加载到视图中。.css
文件与我的主程序位于同一目录中
self.webview = QWebView(MainWindow)
self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile("myCustom.css"))
但是,当我使用setHtml()
将内容添加到页面时,不会加载自定义样式。我已经测试了CSS是否正确地应用于标准浏览器中的HTML
知道我做错了什么吗?在Qt中,所有指向外部文件的路径都必须是绝对路径,而不是相对路径 为了解决此问题,我添加了以下更改:
path = os.getcwd()
self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile(path + "/myCustom.css"))
一切正常。希望这将帮助将来的人,并为他们节省几个小时的调试时间
在Qt中,指向外部文件的所有路径 必须是绝对路径,而不是 相对的 那不是真的。下面的代码适用于我
#include <QtCore>
#include <QtGui>
#include <QtWebKit>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QMainWindow mainWindow;
QWebView* webView = new QWebView(&mainWindow);
webView->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile("google.css"));
QFile source("google.html");
source.open(QIODevice::ReadOnly);
webView->page()->mainFrame()->setHtml(QString::fromUtf8(source.readAll().constData()));
mainWindow.setCentralWidget(webView);
mainWindow.show();
return app.exec();
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
QApplication应用程序(argc、argv);
QMainWindow主窗口;
QWebView*webView=新的QWebView(&mainWindow);
webView->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile(“google.css”);
QFile来源(“google.html”);
open(QIODevice::ReadOnly);
webView->page()->mainFrame()->setHtml(QString::fromUtf8(source.readAll().constData());
mainWindow.setCentralWidget(webView);
mainWindow.show();
返回app.exec();
}
.css文件位于同一目录中
作为我的主要节目
self.webview = QWebView(MainWindow)
self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile("myCustom.css"))
相对路径是相对于当前工作目录进行解释的,它不需要与可执行文件的目录相同。我刚刚遇到了这个问题,所以我将在这里发布我的测试片段;代码段在与python脚本相同的目录中生成自己的.html和.css文件;从同一目录调用脚本进行测试 至少在
python
/PyQt4
中,似乎只有绝对路径可以使用setHtml
测试代码可以是:
- 完全失败(完全空白[在这种情况下,我真的希望
吐出一些错误消息;找到了,但无法让它工作]李>QWebView
- 显示没有css样式的内容李>
- 或显示样式化的内容:
setHtml
方法似乎只使用规范c3
显示样式化文本,其中使用了文件://
+绝对路径。(编辑:只是想指出,中的建议“尝试(QtWebKit顶部的一个非常简单的包装);如果有效,则是您的代码。如果无效,则是网站。”对于重复检查行为非常有帮助)
这是测试脚本的设置:
$ lsb_release --description --codename
Description: Ubuntu 11.04
Codename: natty
$ apt-show-versions -r python-qt4
python-qt4/natty uptodate 4.8.3-2
python-qt4-dbus/natty uptodate 4.8.3-2
$ apt-show-versions -r libqtwebkit4
libqtwebkit4/natty uptodate 2.1~really2.0.2-0ubuntu1
$ python --version
Python 2.7.1+
剧本是:
qtwebkit test.py
#!/usr/bin/env python
# portions from:
# http://pysnippet.blogspot.com/2010/01/more-fun-with-qwebkit.html
import sys
import os
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4 import QtWebKit
global htmltext
def GenerateFiles():
global htmltext
print "GenerateFiles running"
csstext = """
body {
background-color: #058;
margin: 0px;
color: red;
}
"""
css_file = open("test.css", "w")
css_file.write(csstext)
css_file.close()
htmltextTop = """
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
"""
htmltextBottom = """
<title>qtwebkit-test</title>
</head>
<body>
<h1>HEADING</h1>
<p>Just to test ....</p>
<p>.... and test some more</p>
</body>
</html>
"""
cssopen = '<link rel="stylesheet" type="text/css" href="'
cssclose = '">'
# c1
cssfile = "test.css"
# c2
#~ cssfile = os.path.abspath(os.path.dirname(__file__)) + "/" + "test.css"
# c3
#~ cssfile = "file://" + os.path.abspath(os.path.dirname(__file__)) + "/" + "test.css"
# c4
#~ cssfile = "qrc://" + os.path.abspath(os.path.dirname(__file__)) + "/" + "test.css"
# c5 (empty)
#~ cssfile = ""
cssline = cssopen + cssfile + cssclose
#~ htmltext = htmltextTop + htmltextBottom # without css
htmltext = htmltextTop + cssline + htmltextBottom
html_file = open("test.html", "w")
html_file.write(htmltext)
html_file.close()
def main():
global htmltext
GenerateFiles()
qApp = QtGui.QApplication(sys.argv)
webView = QtWebKit.QWebView()
# l1
#~ webView.load(QtCore.QUrl.fromLocalFile("test.html")) # fails
# l2
#~ webView.load(QtCore.QUrl.fromLocalFile("./test.html")) # fails
# l3
#~ webView.load(QtCore.QUrl.fromLocalFile(os.path.abspath(os.path.dirname(__file__)) + "/" + "test.html")) # this works with #c1-#c3
# setHtml
#print htmltext
webView.setHtml(htmltext) # works with #c3 (rest are unstyled)
webView.show()
webView.resize(500, 400)
webView.setWindowTitle(__file__)
sys.exit(qApp.exec_())
if __name__ == "__main__":
main()
#/usr/bin/env python
#部分来自:
# http://pysnippet.blogspot.com/2010/01/more-fun-with-qwebkit.html
导入系统
导入操作系统
从PyQt4导入QtCore
从PyQt4导入QtGui
从PyQt4导入QtWebKit
全局htmltext
def GenerateFiles():
全局htmltext
打印“生成文件正在运行”
csstext=“”
身体{
背景色:#058;
边际:0px;
颜色:红色;
}
"""
css_file=open(“test.css”、“w”)
css_file.write(csstext)
css_file.close()
htmltextTop=“”
"""
htmltextBottom=“”
qtwebkit试验
标题
只是为了测试
…然后再测试一些
"""
cssopen=''
#c1
cssfile=“test.css”
#c2
#~cssfile=os.path.abspath(os.path.dirname(_文件__))+“/”+“test.css”
#c3
#~cssfile=“file://”+os.path.abspath(os.path.dirname(_file__))+“/”+“test.css”
#c4
#~cssfile=“qrc://”+os.path.abspath(os.path.dirname(_文件__))+“/”+“test.css”
#c5(空)
#~cssfile=“”
cssline=cssopen+cssfile+cssclose
#~htmltext=htmltextTop+htmltextBottom#不带css
htmltext=htmltextTop+cssline+htmltextBottom
html_file=open(“test.html”、“w”)
html_file.write(htmltext)
html_file.close()
def main():
全局htmltext
生成文件()
qApp=QtGui.QApplication(sys.argv)
webView=QtWebKit.QWebView()
#l1
#~webView.load(QtCore.QUrl.fromLocalFile(“test.html”)#失败
#l2
#~webView.load(QtCore.QUrl.fromLocalFile(“./test.html”)#失败
#l3
#~webView.load(QtCore.QUrl.fromLocalFile(os.path.abspath(os.path.dirname(+uuuu file_uuu))+“/”+“test.html”)。#这适用于#c1-#c3
#setHtml
#打印htmltext
setHtml(htmltext)与c3一起工作(其余未设置样式)
webView.show()
webView.resize(500400)
webView.setWindowTitle(_文件__)
sys.exit(qApp.exec)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
对于非ASCII路径名,请考虑使用<代码>操作系统.GETCWDUE()/<代码>。我还发现,os.getcwdu()
可以在Mac os-X上返回奇怪的编码值,需要通过unicode数据进行规范化。