[PySide] QLabel crops pixmap
Frank Rueter | OHUfx
frank at ohufx.com
Fri Mar 18 23:23:48 CET 2016
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>* *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20160319/252eac47/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/20160319/252eac47/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/20160319/252eac47/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/20160319/252eac47/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/20160319/252eac47/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/20160319/252eac47/attachment-0004.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/20160319/252eac47/attachment-0005.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/20160319/252eac47/attachment-0006.png>
More information about the PySide
mailing list