[PySide] QLabel vs QWebView for simple html display

Sean Fisk sean at seanfisk.com
Tue Nov 12 09:13:45 CET 2013


Hi Frank,

I think it depends whether the HTML dictates the layout or you would like
to dictate the layout:

   - HTML dictates layout → Use the web view.
   - I want to dictate the layout → Parse the HTML to extract the URL,
   download the image manually, and put it into a QLabel.

Also remember that if you would like to distribute this and bundle
PySide/Qt, using WebKit will add a significant size to your executable. If
you truly need it, include it. However, for this, I don’t think it’s
necessary.

>From what you have said, it sounds like you would like to dictate the
layout. The process isn’t exactly simple, but it’s doable in not too many
lines. Off the top of my head:

#!/usr/bin/env python
import sys
from PySide import QtGuiimport requestsimport lxml.html
def main(argv):
    app = QtGui.QApplication(argv)
    widget = QtGui.QWidget()
    layout = QtGui.QVBoxLayout(widget)
    html = '''<p><span style="font-size: 17px;"><span style="color:
#993300;"><img style="margin-right: 15px; vertical-align: top;"
src="https://pypi.python.org/static/images/python-3.png"
alt="announcements" /><cite>some text that is pulled from a website
but which will be quite simple.</cite></span></span><img
src="http://placekitten.com/200/100" /></p>'''  # NOPEP8
    doc = lxml.html.fragment_fromstring(html)
    for img_src_attribute in doc.xpath('//img/@src'):
        response = requests.get(img_src_attribute)
        pixmap = QtGui.QPixmap()
        pixmap.loadFromData(response.content)
        label = QtGui.QLabel()
        label.setPixmap(pixmap)
        layout.addWidget(label)
    widget.show()
    widget.raise_()
    return app.exec_()
if __name__ == '__main__':
    raise SystemExit(main(sys.argv))

... which yields...
[image: Inline image 2]
I didn't address the issue of transparent backgrounds, etc., because I'm
not sure exactly what's going on there. But all three of the widgets
on-screen are QLabels, so they should be able to do anything a QLabel can
do.

Obviously, do some more error checking than I did if you are pulling this
from a website with untrusted data. Let me know if you need help with that.
Hope this helps!

Sincerely,



--
Sean Fisk


On Mon, Nov 11, 2013 at 11:26 PM, Frank Rueter | OHUfx <frank at ohufx.com>wrote:

> Hi all,
>
> I have a QLabel in my app that displays some very simple html code
> pulled from a website.
>
> So far I have been using it successfully as a sort of news feed, but now
> I need to display an image from a url as well, which QLabel can't do afaik.
>
> So I had a go with QWebView but that just won't be have the same as
> QLabel when it comes to background colour (tried to set it to be
> transparent), sizes, size policies etc.
> I'm also getting some redraw problems when the QWebView is set to a
> transparent background.
>
> Here is some test code:
> http://pastebin.com/cSizj9ET
>
>
> Is it the right approach to force QWebView to behave like QLabel for the
> sole reason of being able to display an image via html? Or is there a
> simpler way of doing this?
>
>
> Cheers,
> frank
> _______________________________________________
> PySide mailing list
> PySide at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/pyside
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20131112/853c28f0/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: screenshot.png
Type: image/png
Size: 62474 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20131112/853c28f0/attachment.png>


More information about the PySide mailing list