PyQt4:QtWebKit使用Qt资源系统显示本地文件

时间:2012-09-11 20:37:11

标签: python url resources pyqt4 local

如何使用Qt资源系统显示本地html文件?显而易见的QtCore.QUrl.fromLocalFile(":/local_file.html")似乎不是正确的语法。

文件mainwindow.qrc(编译前)

<qresource prefix="/">
    <file alias="html_home">webbrowser_html/program_index.html</file>

文件ui_mainwindow:

class Ui_MainWindow(object):    
    def setupUi(self, MainWindow):
        #...
        self.WebBrowser = QtWebKit.QWebView(self.Frame3)

档案webbrower.py

from ui_mainwindow import Ui_MainWindow
import mainwindow_rc

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.setupUi(self)
        #...
        stream = QtCore.QFile(':/webbrowser_html/program_index.html')
        if stream.open(QtCore.QFile.ReadOnly):
            home_html = QtCore.QString.fromUtf8(stream.readAll())
            self.WebBrowser.setHtml()
            stream.close()

2 个答案:

答案 0 :(得分:7)

QUrl需要一个方案,资源为qrc://docs的相关部分:

  

默认情况下,资源可以在相同的应用程序中访问   文件名,因为它们在源树中具有:/前缀或a   带有qrc计划的网址。

     

例如,文件路径:/images/cut.png或URL   qrc:///images/cut.png将提供对cut.png文件的访问权限   应用程序源树中的位置是images/cut.png

所以,请改用:

QtCore.QUrl("qrc:///local_file.html")

修改

您正在为文件提供aliasalias="html_home"):

<qresource prefix="/">
    <file alias="html_home">webbrowser_html/program_index.html</file>

路径现在是:/html_home,而不是:/webbrowser_html/program_index.html

您应该使用:

QtCore.QUrl("qrc:///html_home")

你的情况如下:

class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.setupUi(self)
        #...
        self.WebBrowser.load(QtCore.QUrl('qrc:///html_home'))

(如果您打算使用它,也应该调整ekhumoro's solution。另请注意,您没有在粘贴中设置页面的HTML。)

答案 1 :(得分:0)

可以使用QFile打开本地资源文件:

stream = QFile(':/local_file.html')
if stream.open(QFile.ReadOnly):
    self.browser.setHtml(QString.fromUtf8(stream.readAll()))
    stream.close()