2016/11/18(金) [n年前の日記]
#2 [python] Windows10x 64上のPySideでsvgが表示できなくて悩んだり
PySideを使ったGUIアプリで、メニューやツールバー上にアイコン画像を表示したいなと思った場合。メニューの各項目(QAction)に対して、
_QIcon
というクラスを使いながらアイコン画像を指定してやるのだけど。
ドキュメントを眺めていたら、「Qt4.2 からsvgをサポートしているぜ」と書いてあって。
であれば…。事前に svg を png に変換しておいてから使うのではなく、直接 svg をアイコン画像として指定できそうだなと。
しかし。以下のように実際に試してみても、表示される気配がない。何故。Windows上で動かしてるから?
Pythonインストールフォルダ\Lib\site-packages\PySide\plugins\imageformats\ の中を眺めると、qsvg4.dll なるファイルがあるし、Lib\site-packages\PySide\plugins\iconengines\ の中に qsvgicon4.dll なるファイルもある。であれば、なんだか svg も扱えそうな気がするのだけど…。何故に表示されないのか…。
ドキュメントを眺めていたら、「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 を指定してもちゃんと表示される。
今まではこう書いてた。
ということで、「from PySide import QtSvg, QtXml」を書くと、svg が読み込めるようになるっぽい。が、何故だろう…。Python のそのあたり、よく分からない…。
ちなみに、Pythonスクリプトソース内の問題点を教えてくれる flake8 は、「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を使ってるソースのどこかで、例えば以下を書けば、サポートしている画像フォーマットが確認できるらしい。
「from PySide import QtSvg, QtXml」を書いた場合は、以下の結果に。
「from PySide import QtSvg, QtXml」を書かない場合は、以下の結果に。
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 xpmsvg や svgz が入ってる。
「from PySide import QtSvg, QtXml」を書かない場合は、以下の結果に。
bmp gif ico jpeg jpg mng pbm pgm png ppm tga tif tiff xbm xpmsvg や svgz は入ってない。
[ ツッコむ ]
以上です。