QTextEdit и QPrintPreview медленно работают с большой таблицей HTML
Я пытаюсь создавать отчеты, такие как MS Access, и благодаря примеру QTextEdit все работает очень хорошо. Но когда я открываю большую таблицу HTML (около 5000 строк), загрузка таблицы занимает около 35 секунд, поэтому она очень медленная. Как я могу оптимизировать предварительный просмотр? Может быть, загрузить только одну страницу и изменить текущую страницу в окне предварительного просмотра? Но я не могу найти, как получить доступ к кнопкам предварительного просмотра. Или, может быть, что-то изменить с моей таблицей HTML?
#!/usr/bin/env python
import sys
from PyQt4 import QtCore, QtGui
class TextEdit(QtGui.QMainWindow):
def __init__(self, fileName=None, parent=None):
super(TextEdit, self).__init__(parent)
self.setupFileActions()
self.textEdit = QtGui.QTextEdit(self)
self.setCentralWidget(self.textEdit)
if fileName is None:
fileName = './test5000.htm'
self.load(fileName)
def load(self, f):
if not QtCore.QFile.exists(f):
return False
fh = QtCore.QFile(f)
if not fh.open(QtCore.QFile.ReadOnly):
return False
data = fh.readAll()
codec = QtCore.QTextCodec.codecForHtml(data)
unistr = codec.toUnicode(data)
if QtCore.Qt.mightBeRichText(unistr):
self.textEdit.setHtml(unistr)
else:
self.textEdit.setPlainText(unistr)
return True
def setupFileActions(self):
menu = QtGui.QMenu("&File", self)
self.menuBar().addMenu(menu)
self.actionOpen = QtGui.QAction(
QtGui.QIcon.fromTheme('document-open'),
"&Open...", self, shortcut=QtGui.QKeySequence.Open,
triggered=self.fileOpen)
menu.addAction(self.actionOpen)
menu.addSeparator()
self.actionPrintPreview = QtGui.QAction(
QtGui.QIcon.fromTheme('fileprint'),
"Print Preview...", self,
shortcut=QtCore.Qt.CTRL + QtCore.Qt.SHIFT + QtCore.Qt.Key_P,
triggered=self.filePrintPreview)
menu.addAction(self.actionPrintPreview)
def fileOpen(self):
fn = QtGui.QFileDialog.getOpenFileName(self, "Open File...", "C:",
"HTML-Files (*.htm *.html);;All Files (*)")
if fn:
self.load(fn)
def filePrintPreview(self):
printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution)
printer.setOrientation(1)
printer.setPageSize(8)
printer.setPageMargins(20, 20, 20, 20, 0)
printer.setResolution(300)
preview = QtGui.QPrintPreviewDialog(printer, self)
preview.paintRequested.connect(self.printPreview)
preview.exec_()
def printPreview(self, printer):
self.textEdit.print_(printer)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mainWindows = []
for fn in sys.argv[1:] or [None]:
textEdit = TextEdit(fn)
textEdit.resize(1024, 768)
textEdit.show()
mainWindows.append(textEdit)
sys.exit(app.exec_())
Пример HTML-файла с изображениями находится здесь.
Когда вы запускаете скрипт, он открывает файл HTML (медленно), затем меню File->Print preview запускает диалоговое окно print-preview.