2022/07/30(土) [n年前の日記]
#1 [python][pygtk] PyGObjectがよく分からない
Python + PyGObject を勉強中だけど、どうもよく分からない…。
◎ 背景色すら指定できない。 :
Widget の背景色を変更しようとして、win.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(0, 0, 0)) と書いてみたら、Ubuntu Linux 20.04 LTS 上では特に何も言われなかったけど、Windows10 x64 21H2 + MSYS2 上では DeprecationWarning: Gtk.Widget.modify_bg is deprecated と言われてしまった。どうやら廃止予定らしい…。
代わりに何を使うのかを調べてみたら、Gtk.Widget.override_background_color() を使え、と書いてある。
_Gtk.Widget - Classes - Gtk 3.0
ならばと、win.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0.3, 0.3, 0.3)) と書いてみたら、これまた DeprecationWarning: Gtk.Widget.override_background_color is deprecated と言われる。これも廃止予定なのか…。
_Gtk.Widget - Classes - Gtk 3.0
独自のCSSスタイルを使え、とか言い出した…。どんどん複雑になってきてないか…。
代わりに何を使うのかを調べてみたら、Gtk.Widget.override_background_color() を使え、と書いてある。
_Gtk.Widget - Classes - Gtk 3.0
ならばと、win.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0.3, 0.3, 0.3)) と書いてみたら、これまた DeprecationWarning: Gtk.Widget.override_background_color is deprecated と言われる。これも廃止予定なのか…。
_Gtk.Widget - Classes - Gtk 3.0
独自のCSSスタイルを使え、とか言い出した…。どんどん複雑になってきてないか…。
◎ PyGTKのドキュメントは見つかった。 :
PyGObject ではなく、PyGTK時代のドキュメントを探していたけど、ようやく見つけた。WebArchive に残ってた。
_PyGTK (WebArchive)
_PyGTK Reference Manual (WebArchive)
_gtk.Widget (WebArchive)
でも、公式サイトで PyGObject のドキュメントしか置いてないのは困る…。昔のドキュメントが無かったら、昔のスクリプトを今風に書き直すのも難しくなるやん…。
_PyGTK (WebArchive)
_PyGTK Reference Manual (WebArchive)
_gtk.Widget (WebArchive)
でも、公式サイトで PyGObject のドキュメントしか置いてないのは困る…。昔のドキュメントが無かったら、昔のスクリプトを今風に書き直すのも難しくなるやん…。
◎ 変換ツールがあるらしい。 :
以下のページで、pygi-convert.sh というシェルスクリプトが紹介されていた。
_Porting from Static Bindings - PyGObject
_Projects/PyGObject/IntrospectionPorting - GNOME Wiki!
./pygi-convert.sh hoge.py と打てば、PyGTK時代のスクリプトを PyGObject向けに変換してくれるらしい。中では Perl を呼び出して、PyGTK時代の書き方を PyGObject向けの書き方に置換している模様。
Ubuntu Linux 20.04 LTS 上で、以下のページのスクリプトに対して試してみたけど…。
_A Python screensaver for xscreensaver (Linux) | alvinalexander.com
残念ながら、すんなり動く状態にはならなかった。self.window なんて無い、と言われてしまう。
一応あちこちの単語を書き換えてくれているようではあるけれど…。
_Porting from Static Bindings - PyGObject
_Projects/PyGObject/IntrospectionPorting - GNOME Wiki!
./pygi-convert.sh hoge.py と打てば、PyGTK時代のスクリプトを PyGObject向けに変換してくれるらしい。中では Perl を呼び出して、PyGTK時代の書き方を PyGObject向けの書き方に置換している模様。
Ubuntu Linux 20.04 LTS 上で、以下のページのスクリプトに対して試してみたけど…。
_A Python screensaver for xscreensaver (Linux) | alvinalexander.com
残念ながら、すんなり動く状態にはならなかった。self.window なんて無い、と言われてしまう。
$ ./01_xscrsav.py ... File "./01_xscrsav.py", line 50, in realize if self.window == None: AttributeError: 'ScreenSaverWindow' object has no attribute 'window'
一応あちこちの単語を書き換えてくれているようではあるけれど…。
◎ PyGTKを無理矢理インストールしてみた。 :
Ubuntu Linux 20.04 LTS 上で、Ubuntu Linux 18.04 用のパッケージ、python-gtk2 と python-gtk2-dev をDLして無理矢理インストールしてみた。
_bluetooth - "No package 'pygtk-2.0' found" on Ubuntu 20.04 even after installing python-gtk2 from archives - Ask Ubuntu
一応インストールはできた。
以下のスクリプトを動かしてみたけど…。
_A Python screensaver for xscreensaver (Linux) | alvinalexander.com
一応ウインドウは表示されたものの、内部に何も表示されない。本来は Hello World という文字列が表示されるはずなのだけど…。やはり無理矢理インストールしたのがよろしくないのだろうか。
そもそも、Ubuntu Linux 20.04 LTS 上では PyGTK は廃止されて PyGObject を使えということになっているわけで…。python-gtk2* はアンインストールしておいた。
_bluetooth - "No package 'pygtk-2.0' found" on Ubuntu 20.04 even after installing python-gtk2 from archives - Ask Ubuntu
cd ~/Downloads wget -c http://archive.ubuntu.com/ubuntu/pool/universe/p/pygtk/python-gtk2_2.24.0-5.1ubuntu2_amd64.deb wget -c http://archive.ubuntu.com/ubuntu/pool/universe/p/pygtk/python-gtk2-dev_2.24.0-5.1ubuntu2_all.deb sudo apt-get update sudo apt-get install ./python-gtk2-dev_2.24.0-5.1ubuntu2_all.deb ./python-gtk2_2.24.0-5.1ubuntu2_amd64.deb
一応インストールはできた。
以下のスクリプトを動かしてみたけど…。
_A Python screensaver for xscreensaver (Linux) | alvinalexander.com
一応ウインドウは表示されたものの、内部に何も表示されない。本来は Hello World という文字列が表示されるはずなのだけど…。やはり無理矢理インストールしたのがよろしくないのだろうか。
そもそも、Ubuntu Linux 20.04 LTS 上では PyGTK は廃止されて PyGObject を使えということになっているわけで…。python-gtk2* はアンインストールしておいた。
sudo apt remove python-gtk2 python-gtk2-dev
[ ツッコむ ]
以上、1 日分です。