明日から仕事始めなのでと覚書ページ書き換えラストスパート。
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 出ないか、今日サイトを見たら又伸びているんだが…

