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 は見習ってほしいよ。