Part III. GTK+ Widgets and Objects
何か Linux とか GTK+ とかで新しいプログラミングのネタは無いものか…
なんて考えながら上記ををポッケーと眺めていた。
いきなり見つかったぞ、GtkInfoBar って何?
調べてみると例えば Gedit に動画ファイルをドロップしたエラーで出るあの少し大きなバー。
やれば解るので細かいことは書かないけど、ソレをわざわざ GTK+ 部品の一つにしたようだ。
GTK+ – Wikipedia, the free encyclopedia
GTK+ 2.18 で追加されたようだけど PyGtk から使えるのかな?
自前環境にて PyGtk から使えるか調べてみる。
Mandriva 2010.0 の GTK+ 2.20.0 と PyGtk 2.16 では使えない。
Ubuntu 10.04 の GTK+ 2.21.1 と PyGtk 2.17 では使える。
こっちには今現在はマニュアルは無い、てかまだ version 2.15.2 のままのようで。
ドキュメントが遅れるのは Linux ではしかたがない、商売でやっている MSDN とは違うのだから。
しかしこの程度のインフォメーション表示バーなんて自作しても別に難しくない。
でも GTK+ 自体は GUI 部品の見た目統一を目指しているはずだし(違ったかな?
テーマ切り替え時の追従なんかも期待できる、Opera がまったく追従しないのが気になって…
とにかくせっかくベンダーが用意してくれたものだから使ってみよう。
GtkDialog の vbox アトリビュートのようなものは存在しない。
これ自体が GtkHBox サブクラスであらかじめボタン配置用スペースを予約しているみたい。
とりあえずボタンを押すと InfoBar が出てレスポンスでボタン文字を変更する例を。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import gtk
class InfoBarTest(gtk.Window):
"""
GtkInfoBar Test
PyGtk 2.17 or later.
"""
def __init__(self):
gtk.Window.__init__(self)
vbox = gtk.VBox()
vbox.show()
self.button = gtk.Button("Click!")
self.button.show()
# GtkInfoBar
self.infobar = gtk.InfoBar()
self.infobar.pack_start(gtk.Label("Hi!\nButton Click"))
self.infobar.add_button("_Cancel", gtk.RESPONSE_CANCEL)
self.infobar.add_button(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
# Signal
self.infobar.connect("response", self.on_infobar_response)
self.button.connect("button-press-event", self.on_click)
self.connect("delete-event", gtk.main_quit)
# append
vbox.pack_start(self.infobar, False)
vbox.pack_start(self.button)
self.add(vbox)
self.resize(300, 300)
self.show()
def on_click(self, widget, event=None):
self.infobar.show_all()
def on_infobar_response(self, widget, response_id):
if response_id == gtk.RESPONSE_ACCEPT:
self.button.set_label("OK!")
else:
self.button.set_label("Cancel...")
self.infobar.hide()
if __name__ == "__main__":
w = InfoBarTest()
gtk.main()
バインディングは他の GTK+ 部品と同様みたい、これなら得にマニュアルは不要か。
後はチマチマ弄くってみればもっと見た目とかもよくなると思う。
うん、StatusBar や TitleBar では面積が足りない場合なんかに有効だ。
上手く使えば Debug にも利用できそう、自作すればいいとはいわない。
というか自作すればいいというのなら GtkMessageDialog なんかもいらないわけで。
「ナンデモアリ」を徹底的にやった結果として複雑怪奇になった WPF は見習ってほしいよ。

