[PySide] QLabel crops pixmap
Frank Rueter | OHUfx
frank at ohufx.com
Mon Mar 21 06:16:33 CET 2016
Thanks Tibold.
I need to experiment a little. Outside of my host application (which
comes with it's own QT/PySide/svg plugin) your example works fine, but
inside the hot app the svg is still cropped.
Annoyingly, the same is true for Sean's solution which makes me think
it's a bug in the host application. I will send examples to their
support and use a png in the meantime.
Cheers,
frank
On 19/03/16 12:19 pm, Tibold Kandrai wrote:
>
> Hey guys!
>
> I use QIcon for SVG rendering, had no issues with it on either
> platoforms. It does require the icon svg plugins to be loaded.
>
> from PySide improt QtGui
>
> app = QtGui.Qapplication([])
>
> icon = QtGui.Qicon(’path/to/svg.svg’)
>
> pixmap = icon.pixmap(100, 200) # Pixmap size may be smaller, refer to
> the docs
>
> label = QtGui.QLabel()
>
> label.setPixmap(pixmap)
>
> label.show()
>
> Tibold Kandrai
>
> Software Architect & Engineer
>
> *From:*PySide
> [mailto:pyside-bounces+kandraitibold=gmail.com at qt-project.org] *On
> Behalf Of *Frank Rueter | OHUfx
> *Sent:* Friday, 18 March, 2016 23:24
> *To:* Sean Fisk <sean at seanfisk.com>
> *Cc:* PySide <pyside at qt-project.org>
> *Subject:* Re: [PySide] QLabel crops pixmap
>
> Great, thanks a lot Sean!
> I have to run now but will take a closer look on the weekend.
>
> Cheers,
> frank
>
> On 19/03/16 10:30 am, Sean Fisk wrote:
>
> Oops, forgot the attachment! Here you go.
>
> On Fri, Mar 18, 2016 at 5:28 PM Sean Fisk <sean at seanfisk.com
> <mailto:sean at seanfisk.com>> wrote:
>
> Hi Frank,
>
> I’m mostly seeing similar results. Here is my test program:
>
> |/#!/usr/bin/env python/|||
>
> ||
>
> |*import*||sys|
>
> |*import*||argparse|
>
> ||
>
> |*from*||PySide *import* QtGui|
>
> ||
>
> |arg_parser = argparse.ArgumentParser(|
>
> | description=||'Display an SVG via QPixmap.'||)|
>
> |arg_parser.add_argument(||'svg_path'||, help=||'SVG file to display'||)|
>
> |args = arg_parser.parse_args()|
>
> ||
>
> |app = QtGui.QApplication([])|
>
> ||
>
> |pixmap = QtGui.QPixmap(args.svg_path)|
>
> |label = QtGui.QLabel()|
>
> |label.setPixmap(pixmap)|
>
> ||
>
> |label.show()|
>
> |label.raise_()|
>
> ||
>
> |sys.exit(app.exec_())|
>
> *OS X*
>
>
>
> *Windows*
>
> pixmap-osx.png
>
>
>
> pixmap-win.png
>
> The SVG does not display at all under Windows. However,
> checking the documentation for |QPixmap|
> <http://doc.qt.io/qt-4.8/qpixmap.html#reading-and-writing-image-files>
> suggests checking |QImageReader::supportedImageFormats()| for
> a full list of formats. Doing this yields:
>
> |/#!/usr/bin/env python/|||
>
> ||
>
> |*from*||__future__ *import* print_function|
>
> ||
>
> |*from*||PySide *import* QtGui|
>
> ||
>
> |print(*QtGui.QImageReader.supportedImageFormats(), sep=||'\n'||)|
>
> *OS X*
>
>
>
> *Windows*
>
> bmp
>
> gif
>
> ico
>
> jpeg
>
> jpg
>
> mng
>
> pbm
>
> pgm
>
> png
>
> ppm
>
> svg
>
> svgz
>
> tga
>
> tif
>
> tiff
>
> xbm
>
> xpm
>
>
>
> bmp
>
> gif
>
> ico
>
> jpeg
>
> jpg
>
> mng
>
> pbm
>
> pgm
>
> png
>
> ppm
>
> tga
>
> tif
>
> tiff
>
> xbm
>
> xpm
>
> SVG and SVGZ are not on the list for Windows. This indicates
> to me that Qt will either not display those image types or
> display them incorrectly. I would personally suggest using
> |QSvgWidget|, which utilizes |QSvgRenderer| but is a lot
> easier to use. This works for me on both operating systems:
>
> |/#!/usr/bin/env python/|||
>
> ||
>
> |*import*||sys|
>
> |*import*||argparse|
>
> ||
>
> |*from*||PySide *import* QtGui, QtSvg|
>
> ||
>
> |arg_parser = argparse.ArgumentParser(|
>
> | description=||'Display an SVG via QSvgWidget.'||)|
>
> |arg_parser.add_argument(||'svg_path'||, help=||'SVG file to display'||)|
>
> |args = arg_parser.parse_args()|
>
> ||
>
> |app = QtGui.QApplication([])|
>
> ||
>
> |widget = QtSvg.QSvgWidget(args.svg_path)|
>
> ||
>
> |widget.show()|
>
> |widget.raise_()|
>
> ||
>
> |sys.exit(app.exec_())|
>
> *OS X*
>
>
>
> *Windows*
>
> svgwidget-osx.png
>
>
>
> svgwidget-win.png
>
> If you’re like me, it bothers you that Qt does not respect the
> aspect ratio of the SVG on resize. For that, I created
> |AspectRatioSvgWidget|:
>
> |*from*||__future__ *import* division|
>
> ||
>
> |*class*||||*AspectRatioSvgWidget*||(QtSvg.QSvgWidget):|
>
> |*def* ||*paintEvent*||(self, paint_event):|
>
> | painter = QtGui.QPainter(self)|
>
> | default_width, default_height =
> self.renderer().defaultSize().toTuple()|
>
> | widget_width, widget_height = self.size().toTuple()|
>
> | ratio_x = widget_width / default_width|
>
> | ratio_y = widget_height / default_height|
>
> |*if* ratio_x < ratio_y:|
>
> | new_width = widget_width|
>
> | new_height = widget_width * default_height /
> default_width|
>
> | new_left = ||0|||
>
> | new_top = (widget_height - new_height) / ||2|||
>
> |*else*:|
>
> | new_width = widget_height * default_width /
> default_height|
>
> | new_height = widget_height|
>
> | new_left = (widget_width - new_width) / ||2|||
>
> | new_top = ||0|||
>
> | self.renderer().render(|
>
> | painter,|
>
> | QtCore.QRectF(new_left, new_top, new_width,
> new_height))|
>
> I’ve included a copy of all the sources including the test SVG
> I used in an attachment. Hope this helps, Frank! Let me know :)
>
> ~ Sean
>
> Versions of everything:
>
> *OS X*
>
>
>
> *Windows*
>
> Platform: Darwin-14.5.0-x86_64-i386-64bit
>
> Darwin version info: (‘10.10.5’, (‘’, ‘’, ‘’), ‘x86_64’)
>
> Python compiler: GCC 4.2.1 Compatible Apple LLVM 7.0.2
> (clang-700.1.81)
>
> Python version: CPython 2.7.11
>
> Python interpreter architecture: bits=’64bit’ linkage=’’
>
> PySide version: 1.2.4
>
> PySide version tuple: (1, 2, 4, ‘final’, 0)
>
> Compiled with Qt: 4.8.7
>
> Running with Qt: 4.8.7
>
>
>
> Platform: Windows-8.1-6.3.9600
>
> Windows version info: (‘8.1’, ‘6.3.9600’, ‘’, u’Multiprocessor
> Free’)
>
> Python compiler: MSC v.1500 64 bit (AMD64)
>
> Python version: CPython 2.7.11
>
> Python interpreter architecture: bits=’64bit’ linkage=’WindowsPE’
>
> PySide version: 1.2.4
>
> PySide version tuple: (1, 2, 4, ‘final’, 0)
>
> Compiled with Qt: 4.8.7
>
> Running with Qt: 4.8.7
>
> |/#!/usr/bin/env python/|||
>
> ||
>
> |*from*||__future__ *import* print_function|
>
> |*import*||platform|
>
> |*import*||argparse|
>
> ||
>
> |*import*||PySide|
>
> ||
>
> |arg_parser = argparse.ArgumentParser(|
>
> | description=||'Print information about the platform, Python, and PySide.'||)|
>
> |arg_parser.parse_args()|
>
> ||
>
> |platform_funcs = dict(|
>
> | Windows=platform.win32_ver,|
>
> | Darwin=platform.mac_ver,|
>
> | Linux=platform.linux_distribution,|
>
> |)|
>
> |system = platform.system()|
>
> ||
>
> |*for*||key, val *in* [|
>
> | (||'Platform'||, platform.platform()),|
>
> | (||'{} version info'||.format(system), platform_funcs[system]()),|
>
> | (||'Python compiler'||, platform.python_compiler()),|
>
> | (||'Python version'||, ||'{} {}'||.format(|
>
> | platform.python_implementation(),
> platform.python_version())),|
>
> | (||'Python interpreter architecture'||,|
>
> |||'bits={!r} linkage={!r}'||.format(*platform.architecture())),|
>
> | (||'PySide version'||, PySide.__version__),|
>
> | (||'PySide version tuple'||, PySide.__version_info__),|
>
> | (||'Compiled with Qt'||, PySide.QtCore.__version__),|
>
> | (||'Running with Qt'||, PySide.QtCore.qVersion()),|
>
> |]:|
>
> | print(||'{}: {}'||.format(key, val))|
>
>
>
>
> --
>
> Sean Fisk
>
> On Mon, Mar 14, 2016 at 3:51 PM, Frank Rueter | OHUfx
> <frank at ohufx.com <mailto:frank at ohufx.com>> wrote:
>
> Nobody?
> Guess I will use pngs then until I can figure this out.
>
> On 14/03/16 3:36 pm, Frank Rueter | OHUfx wrote:
>
> Hi all,
>
> so I have realised that its not the QLabel but the
> QPixmap in combination to a vector graphic (svg).
> Below is my test code which works fine on osx but
> crops the image on the right hand side when run under
> windows.
> The svg was saved with a 200 pixel output resolution
> in the header, and when I check the QPixmap's width it
> does return 200, still it crops the image.
> Do I actually have to start using Qt.QSvgRender for
> something simple like this?
>
> Cheers,
> frank
>
>
> from PySide import QtGui
> def pixmapTest(imgPath):
> l = QtGui.QLabel()
> l.setPixmap(QtGui.QPixmap(imgPath))
> return l
>
> if __name__ == '__main__':
> import sys
> app = QtGui.QApplication([])
> if sys.platform == 'win32':
> imgPath = 'z:/path/to/svg/image.svg'
> else:
> imgPath = '/server/path/path/to/svg/image.svg'
> l = pixmapTest(imgPath)
> l.show()
> sys.exit(app.exec_())
>
> On 11/03/16 7:46 pm, Frank Rueter | OHUfx wrote:
>
> Hi,
>
> I have been using something like the below code on
> osx without trouble (simple QLabel with setPixmap
> to show an svg file from my resource module).
>
> When running the same code on windows, the label
> crops the image on the right, and I cannot figure
> out how to make it behave the same as under osx
> (adjust to the pixmap's size). Even brudte forcing
> it's width to somethign much larger than the
> pixmap will still result in a cropped display.
>
> Does anybody know what might be going on?
>
> Cheers, frank
>
> import common
>
> from PySide.QtGui import * # for testing only
>
> from PySide.QtCore import * # for testing only
>
> class TestImageLabel(QLabel):
>
> def __init__(self, parent=None):
>
> super(TestImageLabel, self).__init__(parent)
>
> self.pm <http://self.pm> =
> common.IconCache.getPixmap('nuBridge_logo')
>
> self.setPixmap(self.pm <http://self.pm>)
>
> def showEvent(self, e):
>
> super(TestImageLabel, self).showEvent(e)
>
> print self.pm.width()
>
> print self.width()
>
> w = TestImageLabel()
>
> w.show()
>
> --
>
> <http://www.ohufx.com>
>
>
>
> *vfx compositing
> <http://ohufx.com/index.php/vfx-compositing>**|
> **workflow customisation and consulting
> <http://ohufx.com/index.php/vfx-customising> *
>
>
>
> _______________________________________________
>
> PySide mailing list
>
> PySide at qt-project.org <mailto:PySide at qt-project.org>
>
> http://lists.qt-project.org/mailman/listinfo/pyside
>
> --
>
> ohufxLogo 50x50 <http://www.ohufx.com>
>
>
>
> *vfx compositing
> <http://ohufx.com/index.php/vfx-compositing>**|
> **workflow customisation and consulting
> <http://ohufx.com/index.php/vfx-customising> *
>
>
>
> _______________________________________________
>
> PySide mailing list
>
> PySide at qt-project.org <mailto:PySide at qt-project.org>
>
> http://lists.qt-project.org/mailman/listinfo/pyside
>
> --
>
> ohufxLogo_50x50.png <http://www.ohufx.com>
>
>
>
> *vfx compositing
> <http://ohufx.com/index.php/vfx-compositing>**| **workflow
> customisation and consulting
> <http://ohufx.com/index.php/vfx-customising> *
>
>
> _______________________________________________
> PySide mailing list
> PySide at qt-project.org <mailto:PySide at qt-project.org>
> http://lists.qt-project.org/mailman/listinfo/pyside
>
> --
>
> ohufxLogo 50x50 <http://www.ohufx.com>
>
>
>
> *vfx compositing <http://ohufx.com/index.php/vfx-compositing>**|
> **workflow customisation and consulting
> <http://ohufx.com/index.php/vfx-customising> *
>
--
ohufxLogo 50x50 <http://www.ohufx.com> *vfx compositing
<http://ohufx.com/index.php/vfx-compositing> | *workflow customisation
and consulting <http://ohufx.com/index.php/vfx-customising>* *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160321/73af72e2/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 27856 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160321/73af72e2/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 959 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160321/73af72e2/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 28639 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160321/73af72e2/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 7528 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160321/73af72e2/attachment-0003.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 2666 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160321/73af72e2/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ohufxLogo_50x50.png
Type: image/png
Size: 2666 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160321/73af72e2/attachment-0005.png>
More information about the PySide
mailing list