2019/11/09(土) [n年前の日記]
#1 [tkinter][python] tkinterを勉強中
Python + pycairo で描いた何かしらを tkinter を使ってGUIで表示できないか試しているところ。
ちなみに、pycairo の Surface を tkinter の PhotoImage に変換するには、PIL (Pillow) の Image と ImageTk を使う。
_python - Cairo with tkinter? - Stack Overflow
ちなみに、pycairo の Surface を tkinter の PhotoImage に変換するには、PIL (Pillow) の Image と ImageTk を使う。
_python - Cairo with tkinter? - Stack Overflow
◎ Canvas上での画像表示位置がおかしい。 :
pycairo の Surface を、Tk の Label上に表示することはできたけど。Tk の Canvas に表示しようとしたら妙な位置に表示されてしまって悩んでしまった。
以下のページを眺めていて、理由が分かった。
_Python の Tkinter で 画像を表示する - つきすけ の コーディング記
Canvas に画像を指定する際に、anchor の指定が絡んでたのだな…。anchor=tkinter.NW を指定することで、(0, 0) が左上になるのだろう。
今までは anchor を指定してなかったので、Canvas の真ん中が (0, 0) になってしまって、思った通りの位置に表示できなかったらしい。
以下のページを眺めていて、理由が分かった。
_Python の Tkinter で 画像を表示する - つきすけ の コーディング記
Canvas に画像を指定する際に、anchor の指定が絡んでたのだな…。anchor=tkinter.NW を指定することで、(0, 0) が左上になるのだろう。
今までは anchor を指定してなかったので、Canvas の真ん中が (0, 0) になってしまって、思った通りの位置に表示できなかったらしい。
[ ツッコむ ]
#2 [pygtk] PyGTKを勉強中
pycairo を使う場合はえてして PyGTK or PyGObject もついてくるわけだし、pycairo の描画結果を PyGTK で表示したほうがいいかなと思い始めて、PyGTK について勉強し始めたところ。
◎ 「drawable is not a pixmap or window」が気になる。 :
色々な Widget を表示して、アプリっぽいレイアウトになるように動作確認をしていたけれど。Pythonスクリプトを終了させるタイミングで、妙な警告メッセージが表示されて困ったり。
環境は、Windows10 x64 1903 + Pythn 2.7.17 32bit + PyGTK 2.24.0。
ググってみたけれど、こうすれば回避できるという事例が見つからず。
gtk.DrawingArea() を使っているのがいかんのかと思ったけれど、今まで写経して動いていたスクリプト内でもガンガン使っているのに、そちらでは件の警告メッセージは出ないわけで。となると、そこではないよな…。
色々な Widget を消したり足したりしてるうちに分かってきた。入力欄が存在する Widget を表示すると、件の警告メッセージが表示される。例えば、gtk.SpinButton() とか、gtk.Entry() とかそのあたり。
入力欄が無いWidget、例えば gtk.Button() や gtk.Label() を代わりに表示すると、例のメッセージは出なくなった。しかし、入力ができないのでは、GUIアプリにならない…。
以下のページで、input method が云々が原因で、と言及されている。もしかするとそれと同じ現象、なのかもしれない。
_ubuntu 11.10 - Gdk-WARNING **: /build/....../gdkdrawable-x11.c:952 drawable is not a pixmap or window - Stack Overflow
> python pygtk_helloworld2.py pygtk_helloworld2.py:120: GtkWarning: gdkdrawable-win32.c:2013 drawable is not a pixmap or window gtk.main()
環境は、Windows10 x64 1903 + Pythn 2.7.17 32bit + PyGTK 2.24.0。
ググってみたけれど、こうすれば回避できるという事例が見つからず。
gtk.DrawingArea() を使っているのがいかんのかと思ったけれど、今まで写経して動いていたスクリプト内でもガンガン使っているのに、そちらでは件の警告メッセージは出ないわけで。となると、そこではないよな…。
色々な Widget を消したり足したりしてるうちに分かってきた。入力欄が存在する Widget を表示すると、件の警告メッセージが表示される。例えば、gtk.SpinButton() とか、gtk.Entry() とかそのあたり。
入力欄が無いWidget、例えば gtk.Button() や gtk.Label() を代わりに表示すると、例のメッセージは出なくなった。しかし、入力ができないのでは、GUIアプリにならない…。
以下のページで、input method が云々が原因で、と言及されている。もしかするとそれと同じ現象、なのかもしれない。
_ubuntu 11.10 - Gdk-WARNING **: /build/....../gdkdrawable-x11.c:952 drawable is not a pixmap or window - Stack Overflow
[ ツッコむ ]
以上、1 日分です。