2011-02-09 24 views
6

ツリービューの各行について、4つの画像ボタンを隣り合わせにしたい。ラジオボタンのように動作し、一度にアクティブにできるのは1つだけです。各ボタンには「オン」と「オフ」の画像があります。gtk treeview:行に画像ボタンを配置する

どうすればよいですか?私はそこに画像を置く方法と、トグルボタンを置く方法を考え出しましたが、これは、私が望むことをする事前構築されたセルレンダラーがいないので、もう少し努力する必要があるようです。

基本的に私の問題を解決する方法は、gtk.treeviewの画像をクリック可能にする方法を考え出すことです。何か案は?

答えて

1

'http://www.daa.com.au/pipermail/pygtk/2010-March/018355.html 'をご覧ください。 gtk.CellRendererPixbufを起動可能にし、クリックイベント信号に接続する方法を説明します。

cell = CellRendererPixbufXt() 
cell.connect('clicked', func) 

更新

としては、この答えを指摘し、または所定の基準は、宣伝通りに動作しません。クリックされた信号を送信する必要があるdo_activateメソッドがありません。それが終わると、cell.connectが動作します。

この回答が間違っている場合は申し訳ありません。ここで

+0

実際には、参照には表示されません... – schlamar

+0

私はあなたが何を見ているのかわかりませんが、私の参考はありません。あなたの答えは、私が与えたリファレンスとほとんど同じことに気付きます。あなたが何か他のことについて不平を言うなら、少しはっきりしてください。 –

+0

「クリックされた」信号は決して引き起こされません。実際には、私はあなたの参照から引用する場合、これは大きな驚きではありません: "しかし、私はCellRendererの をクリックすると、カスタム"クリック "信号を放出する方法がわかりません。 – schlamar

0

は私のために働いていたものです。ここで

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 
    gsignal('clicked', str) 
    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 
    def do_activate(self, event, widget, path, background_area, cell_area, flags): 
     self.emit('clicked', path) 
+0

'kiwi.utils.gsignal'を参照していると思いますか? – schlamar

2

kiwi必要とせずに短いバージョンです。

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 

    __gsignals__ = {'clicked': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, 
           (gobject.TYPE_STRING,)) 
        } 

    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 

    def do_activate(self, event, widget, path, background_area, cell_area, 
        flags): 
     self.emit('clicked', path) 
+0

私はあなたのコードを使用しようとしていますが、 'gi.repository.Gtk 'オブジェクトには属性' CELL_RENDERER_MODE_ACTIVATABLE 'がありません - 理由は何ですか? –

+0

はい、私のコードは(Py)Gtk 2です。 – schlamar

関連する問題