Разбор и отображение HTML в виджете QTextEdit

У меня есть нередактируемый виджет QTextEdit в одном из моих приложений. Основываясь на выборе комбинированного списка, я хочу отобразить дополнительную информацию.

Мой текущий подход заключается в загрузке HTML-файлов из каталога и отображении их в QTextEdit-Field. Это звучит легко (с функциями setHtml или insertHtml), но почему-то не работает так просто, как я думал. Я считаю, что сначала мне нужно разобрать или загрузить файл. Как я могу продолжить?

h = (helpdir + str + ".html") # contains the helpfiles path (Format QString)
# Load in HTML?
textfield.insertHtml(h) # Should somehow insert the html

Другие подходы (особенно в свете будущего перевода помощи), которые легко реализовать, приветствуются. Я бы предпочел любое решение без дополнительных библиотек или не базовых пакетов.

2 ответа

Решение

Да, вы должны загрузить файл HTML, прежде чем вставить его в QTextEdit, Но сделать это довольно легко:

    f = QFile("path/to/your/htmlfile")
    f.open(QFile.ReadOnly|QFile.Text)
    istream = QTextStream(f)
    textfield.setHtml(istream.readAll())
    f.close()

Это работает просто отлично (при условии, что ваш HTML-файл не очень большой). Вы также можете прочитать файл построчно, если он лучше соответствует вашим потребностям.

Вы можете использовать QtWebKit, это лучший способ использовать html-контент в qt. Он должен прийти с вашей установкой Python qt. проверьте код ниже:

test.py

import sys
from PyQt4 import QtCore, QtGui, QtWebKit

app = QtGui.QApplication(sys.argv)
view = QtWebKit.QWebView()
view.setHtml(open('test.html').read())
window = QtGui.QMainWindow()
window.setCentralWidget(view)
window.show()
sys.exit(app.exec_())

test.html

<html><body><h1>test page</h1>testing...</body></html>
Другие вопросы по тегам