mieki256's diary



2016/11/18(金) [n年前の日記]

#2 [python] Windows10x 64上のPySideでsvgが表示できなくて悩んだり

PySideを使ったGUIアプリで、メニューやツールバー上にアイコン画像を表示したいなと思った場合。メニューの各項目(QAction)に対して、 _QIcon というクラスを使いながらアイコン画像を指定してやるのだけど。

ドキュメントを眺めていたら、「Qt4.2 からsvgをサポートしているぜ」と書いてあって。

であれば…。事前に svg を png に変換しておいてから使うのではなく、直接 svg をアイコン画像として指定できそうだなと。

しかし。以下のように実際に試してみても、表示される気配がない。何故。Windows上で動かしてるから?
    new_action = QAction("&New", self)
    new_icon = QIcon("./document-new.svg")
    new_action.setIcon(new_icon)
    new_action.setShortcut(QKeySequence(QKeySequence.New))
    new_action.setToolTip("New Canvas")
    new_action.triggered.connect(self.new_canvas)

Pythonインストールフォルダ\Lib\site-packages\PySide\plugins\imageformats\ の中を眺めると、qsvg4.dll なるファイルがあるし、Lib\site-packages\PySide\plugins\iconengines\ の中に qsvgicon4.dll なるファイルもある。であれば、なんだか svg も扱えそうな気がするのだけど…。何故に表示されないのか…。

importの書き方で使えたり使えなかったりするらしい。 :

_python - PySide SVG image formats not found? - Stack Overflow で、気になる書き込みが。「from PySide import QtSvg を書いてみたか?」と書いてある、ような。

試してみたら、たしかに svg が表示された。例えば以下のように書いておくと、画像ファイルとして svg を指定してもちゃんと表示される。
import sys
from PySide.QtCore import *  # NOQA
from PySide.QtGui import *  # NOQA
from PySide import QtSvg, QtXml  # NOQA

今まではこう書いてた。
import sys
from PySide.QtCore import *  # NOQA
from PySide.QtGui import *  # NOQA

ということで、「from PySide import QtSvg, QtXml」を書くと、svg が読み込めるようになるっぽい。が、何故だろう…。Python のそのあたり、よく分からない…。

ちなみに、Pythonスクリプトソース内の問題点を教えてくれる flake8 は、「QtSvg なんて使ってねえぞ? 無駄な行じゃねえのか?」と文句を言ってくる。どういうことだろう。

サポートしてる画像フォーマットを確認。 :

PySideを使ってるソースのどこかで、例えば以下を書けば、サポートしている画像フォーマットが確認できるらしい。
        for s in QImageReader.supportedImageFormats():
            print(s)

「from PySide import QtSvg, QtXml」を書いた場合は、以下の結果に。
bmp
gif
ico
jpeg
jpg
mng
pbm
pgm
png
ppm
svg
svgz
tga
tif
tiff
xbm
xpm
svg や svgz が入ってる。

「from PySide import QtSvg, QtXml」を書かない場合は、以下の結果に。
bmp
gif
ico
jpeg
jpg
mng
pbm
pgm
png
ppm
tga
tif
tiff
xbm
xpm
svg や svgz は入ってない。

以上です。

過去ログ表示

Prev - 2016/11 - Next
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project