2016/11/18(金) [n年前の日記]
#1 [python] PySideでツールバー表示のテスト
それっぽくなってきた。
_PySideを使ってツールバーの表示をテスト - gist
もっと短く書けないものかと思わないでもないけど…。まあいいか。テストだし。表示できることは分かったし。
_PySideを使ってツールバーの表示をテスト - gist
もっと短く書けないものかと思わないでもないけど…。まあいいか。テストだし。表示できることは分かったし。
◎ ツールバー用アイコン画像も置いときます。 :
自作したツールバー用のアイコン画像 ( svg + png (48x48, 32x32, 22x22, 16x16) ) もzipにして置いときます。ライセンスは CC0 / Public Domain のフリー素材ってことで。
_artlibreset_substitute_20161118.zip (104KB)
中に mkpng.rb てのが入ってますが…。これは _Windows版のrsvg-convert.exe を使って、scalable\*.svg を png に変換するバッチファイル代わりのRubyスクリプト、なので気にしないでください。
ちなみに、svg 作成には、 _Inkscape を使いました、とメモ。
_artlibreset_substitute_20161118.zip (104KB)
中に mkpng.rb てのが入ってますが…。これは _Windows版のrsvg-convert.exe を使って、scalable\*.svg を png に変換するバッチファイル代わりのRubyスクリプト、なので気にしないでください。
ちなみに、svg 作成には、 _Inkscape を使いました、とメモ。
◎ QMainWindowは最初からメニューバー等を持ってるらしい。 :
今まで知らなかったけど、QMainWindow は、最初からメニューバーやステータスバーを持っているらしい。いや、持っているというか、存在することが前提っぽく処理をすると自動的に作られる、てな便利な実装になってるだけかもしれないけれど。
いきなり self.statusBar().showMessage("Ready.") とでもやればステータスバーが出現するし。いきなり mb = self.menuBar() とやればメニューバーにアクセスできてしまった。ツールバーも同様で、いきなり tb = self.addToolBar("File") とかやると、ツールバーが出現するようで。
てなあたり、 _Menus and toolbars in PySide を眺めていて気付きました。今まで知らなかったから、メニューバーやステータスバーを生成してから、QMainWindow に setMenuBar() や setStatusBar() で設定してました。そんなことをする必要は無かったのだな…。
いきなり self.statusBar().showMessage("Ready.") とでもやればステータスバーが出現するし。いきなり mb = self.menuBar() とやればメニューバーにアクセスできてしまった。ツールバーも同様で、いきなり tb = self.addToolBar("File") とかやると、ツールバーが出現するようで。
てなあたり、 _Menus and toolbars in PySide を眺めていて気付きました。今まで知らなかったから、メニューバーやステータスバーを生成してから、QMainWindow に setMenuBar() や setStatusBar() で設定してました。そんなことをする必要は無かったのだな…。
[ ツッコむ ]
#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 は入ってない。
[ ツッコむ ]
#3 [zatta] 仕事で殺されそうになったことがない人が言ってるんじゃなかろうか
某企業の「取り組んだら『放すな』、殺されても放すな」というソレが、なんだか気になってて。
前々から、たまに言ってるけど…。本当に死にそうな目に遭ったことがない人ほど、不用意に「死ぬ気でやれ」とか口走ってしまうもんで。本当に死にそうな目にあった人なら、「いや…そこまでやらんでええよ…ていうかそういう精神状態になったらダメだろ…それもう負け戦確定だから…」とモニョモニョしちゃうはずで。
例えば、太平洋戦争中に戦地に行って大変な思いをした人達は、「もう1回戦争やりてえなあ」とか言ったりしないわけでね。戦地で片腕無くした水木しげる先生だって「戦争はいかんですよ。腹が減る」と言ってるし。 *1 「戦争しようぜ!」と口走るのは、戦地で地獄を見た経験が全然無い人だったり、どこか壊れちゃった人だったりするわけで。
本当に酷い目に遭った人は、そういうことを言わんのですよ。そのように考えると、「殺されても放すな」という文を書いた人は、これはほぼ間違いなく仕事で殺されそうになったことが無い人だよなと…。そういう人だから、そういう文を書けてしまう。ていうか実際に殺されてたらその一文は書けないし。<オイ。
もし、本当に仕事で殺されそうな目に遭った人なら、「いやいやいや、殺されそうな状態なら仕事なんかさっさと捨てなきゃダメでしょ。仕事どころじゃねえよ。全ては命あっての物種だよ? 生きてるから仕事もできるんだよ? 死んだら仕事もへったくれもないだろ。只の馬鹿だろ」ぐらいのことを言ってくれるんじゃないかと。
まあ、「アレは、物の喩えというか、あくまで仕事に取り組む意識やスタンスの話で…」「君は空気も読めないのか…」とか言い出すのだろうけど。スタンス云々でそういうアレな文を書いちゃう時点で、この人たぶん本当の地獄は見てないな、自分では見てたつもりになってただけの人だろうな、と思えてくることに変わりはないわけで。
てなわけで、「死ぬ気で」とか「殺されても」とか平気で口走る人達の言に耳を傾ける必要は一切無いよな、真に受けちゃダメ、ていうかそういう人種とはちょっと距離を置いたほうがいい、下手するとマジにこっちが殺されるし、てなことを自分は思ってしまうのでした。
前々から、たまに言ってるけど…。本当に死にそうな目に遭ったことがない人ほど、不用意に「死ぬ気でやれ」とか口走ってしまうもんで。本当に死にそうな目にあった人なら、「いや…そこまでやらんでええよ…ていうかそういう精神状態になったらダメだろ…それもう負け戦確定だから…」とモニョモニョしちゃうはずで。
例えば、太平洋戦争中に戦地に行って大変な思いをした人達は、「もう1回戦争やりてえなあ」とか言ったりしないわけでね。戦地で片腕無くした水木しげる先生だって「戦争はいかんですよ。腹が減る」と言ってるし。 *1 「戦争しようぜ!」と口走るのは、戦地で地獄を見た経験が全然無い人だったり、どこか壊れちゃった人だったりするわけで。
本当に酷い目に遭った人は、そういうことを言わんのですよ。そのように考えると、「殺されても放すな」という文を書いた人は、これはほぼ間違いなく仕事で殺されそうになったことが無い人だよなと…。そういう人だから、そういう文を書けてしまう。ていうか実際に殺されてたらその一文は書けないし。<オイ。
もし、本当に仕事で殺されそうな目に遭った人なら、「いやいやいや、殺されそうな状態なら仕事なんかさっさと捨てなきゃダメでしょ。仕事どころじゃねえよ。全ては命あっての物種だよ? 生きてるから仕事もできるんだよ? 死んだら仕事もへったくれもないだろ。只の馬鹿だろ」ぐらいのことを言ってくれるんじゃないかと。
まあ、「アレは、物の喩えというか、あくまで仕事に取り組む意識やスタンスの話で…」「君は空気も読めないのか…」とか言い出すのだろうけど。スタンス云々でそういうアレな文を書いちゃう時点で、この人たぶん本当の地獄は見てないな、自分では見てたつもりになってただけの人だろうな、と思えてくることに変わりはないわけで。
てなわけで、「死ぬ気で」とか「殺されても」とか平気で口走る人達の言に耳を傾ける必要は一切無いよな、真に受けちゃダメ、ていうかそういう人種とはちょっと距離を置いたほうがいい、下手するとマジにこっちが殺されるし、てなことを自分は思ってしまうのでした。
*1: 実際には水木しげる先生自身が言ったわけじゃなくて、先生が描いた漫画の中でソレに近い台詞が書いてある、という話らしい。
[ ツッコむ ]
以上、1 日分です。