明日から仕事始めなのでと覚書ページ書き換えラストスパート。
GtkSwitch を試していて困った。
activate シグナルがあるけど connect しても発行されない。
but use the notify::active signal.
なんて書いてあるから当然なんだけど、どう使うの?
さて今日も英語と格闘が始まるな。
Short Example of GSettings Bindings with Python using a Gtk Switch ? Mariano Chavero
なるほど、こうやって使うのか。
GNOME3 環境の人しか実験できないサンプルだけど on off でデスクトップアイコンの表示切り替えができるのを確認した。
しかも dconf-editor で切り替えたら GtkSwitch も切り替わる双方向。
つまり Widget のプロパティと GSettings はバインディングできるんだね。
それなら Widget 同士でもやれそうだと思ったので調べてみる。
というか GSettings のサンプルだと GNOME3 以外を使っている人には解らないし。
g_object_bind_property という関数で Widget 同士のバインドもできそう。
PyGI で GObject.Binding 内を探すが見当たらない。
GObject-2.0 Python API Documentation
うーんココには有ると書いているんだけど。
って URL をよく見たら ubuntu-12.10 だ、つまり Fedora17 より新しい。
仮想 Ubuntu 12.10 を立ち上げ dir してみる。
あぁやっぱり。
しかたがない、今は仮想 Ubuntu 上で試してみるか。
#!/usr/bin/env python #-*- coding:utf-8 -*- """ Widget Property Binding Sample """ from gi.repository import GObject, Gtk switch = Gtk.Switch() check = Gtk.CheckButton("Check") GObject.Binding.bind_property( switch, "active", check, "active", GObject.BindingFlags.BIDIRECTIONAL ) hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0) hbox.pack_start(switch, False, False, 0) hbox.pack_start(check, False, False, 0) w = Gtk.Window() w.add(hbox) w.connect("delete-event", Gtk.main_quit) w.show_all() Gtk.main()
GBindingFlags は
GObject.BindingFlags.DEFAULT では source 側からの一方向バインド。
GObject.BindingFlags.BIDIRECTIONAL で双方向になる。
他2つはよく解らない、上記2つあれば充分だし。
こんな感じでデータと GUI を結びつければ面白くなるね。
WPF の ObservableCollection みたくできるかも、アレは混乱の元だが。
しかし早く fedora 18 出ないか、今日サイトを見たら又伸びているんだが…