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.

0 ответов

Другие вопросы по тегам