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 <[email protected]> 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> > _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
