[PyQt] Re: Incorrect HTML (Rich Text) parsing/rendering.

mir amicitas amicitas at gmail.com
Sun Mar 29 12:21:28 BST 2009


I finally got around to building an test of this in c++.  The problems
exist there too.  So this is a QT bug, and has nothing to to with
PyQt.

amicitas

On Sun, Mar 22, 2009 at 11:57 PM, mir amicitas <amicitas at gmail.com> wrote:
> I am having problems with rendering HTML (Rich Text) in PyQt.
>
> I am using PyQt-Py2.6-gpl-4.4.4-2 with Python 2.6.1.
>
> These errors show up with any widget that can display Rich Text.
> For my HTML display example I am using a QTextBrowser.
>
> The problems involve incorrect closing of various tags.  Even more
> strange is that the behavior is different if I use
> QTextBrowser.setHtml() or QTextBrowser.setSource().
>
> For the example that I am attaching below there are two errors.
> 1.  The <div> tags around the title are not being closed until after
> the next line of text.
> 2.  The list is not closed until the end of the file  (<ol> and <li> tags).
>
> Problem #1 happens with both setHtml() and setSource().
> Problem #2 happens only with setSource.
> Clicking on a link has equivalent behavior to using setSource()
>
> Both the display of the HTML in the widget, and the output from
> QTextBrowser.toHtml() are incorrect.
>
> I do not know if this is a Qt or a PyQt issue, but I thought I would
> ask for help here first.
>
> Included at the bottom of this message is a representative program and
> the output (simplified).
> Attached is the program and output (raw).
>
> Thanks in advance for any help.
>
> Amicitas
>
>
> =======================
> html_display.py
> =======================
> from PyQt4 import QtCore, QtGui
> import sys
>
> # Set up the base window.
> class MainWindow(QtGui.QMainWindow):
>     def __init__(self, parent):
>         QtGui.QMainWindow.__init__(self, parent)
>
>         html = r"""
> <html>
> <body>
> <div align=center>This should be centered.</div>
> <br> This should be left justified.
> <ol>
>   <li>Item 1</li>
>   <li>Item 2</li>
> </ol>
> <br>
> <br>This should not be part of a list.
> <br>
> <br><a href="simple.html">simple.html</a>
> </body>
> </html>
> """
>
>         self.browser = QtGui.QTextBrowser(self)
>         self.setCentralWidget(self.browser)
>         self.resize(600,400)
>
>         self.browser.setHtml(html)
>         filename = 'output_setHtml.html'
>         with open(filename, 'w') as file:
>             file.write(self.browser.toHtml())
>
>         source = QtCore.QUrl('simple.html')
>         self.browser.setSource(source)
>         filename = 'output_setSource.html'
>         with open(filename, 'w') as file:
>             file.write(self.browser.toHtml())
>
> # Initialize the Qt application
> app = QtGui.QApplication(sys.argv)
>
> # Start the program.
> if __name__ == '__main__':
>     main_window = MainWindow(None)
>     main_window.show()
>     sys.exit(app.exec_())
>
>
> =======================
> simple.html - Input HTML
> =======================
> <html>
> <body>
> <div align=center>This should be centered.</div>
> <br> This should be left justified.
> <ol>
>  <li>Item 1</li>
>  <li>Item 2</li>
> </ol>
> <br>
> <br>This should not be part of a list.
> <br>
> <br><a href="simple.html">simple.html</a>
> </body>
> </html>
>
>
>
> =======================
> output_setHtml.html - Output HTML
> (For clarity I have removed all css and added white space)
> =======================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
> "http://www.w3.org/TR/REC-html40/strict.dtd">
>
> <html>
>
> <head>
> <meta name="qrichtext" content="1" />
> <style type="text/css">
> p, li { white-space: pre-wrap; }
> </style>
> </head>
>
> <body>
> <p>
>  This should be centered.
>  <br />This should be left justified.
> </p>
> <ol>
>  <li>Item 1 </li>
>  <li>Item 2</li>
> </ol>
> <p>
>  <br />
>  <br />This should not be part of a list.
>  <br />
>  <br /><a href="simple.html"><span>simple.html</span></a>
> </p>
> </body>
>
> </html>
>
>
>
> =======================
> output_setSource.html - Output HTML
> (For clarity I have removed all css and added white space)
> =======================
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
> "http://www.w3.org/TR/REC-html40/strict.dtd">
> <html>
>
> <head>
> <meta name="qrichtext" content="1" />
> <style type="text/css">
> p, li { white-space: pre-wrap; }
> </style>
> </head>
>
> <body>
> <p align="center">
>  This should be centered.
>  <br />This should be left justified.
> </p>
> <ol>
>  <li>Item 1 </li>
>  <li>Item 2
>    <br />
>    <br />This should not be part of a list.
>    <br />
>    <br /><a href="simple.html"><span>simple.html</span></a>
>  </li>
> </ol>
> </body>
>
> </html>
>



More information about the PyQt mailing list