Разбор и отображение 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>