5

gtk.TreeView選択内容が変更された場合はいつでも検出し、変更された場合は、この情報を使用して関数を呼び出したいと思います。これまでに私が見つけた唯一の方法は、これらすべての信号に接続することです。

...
    self.sitterView.connect("cursor-changed", self.selectionChanged)
    self.sitterView.connect("unselect-all", self.selectionChanged)
    self.sitterView.connect("toggle-cursor-row", self.selectionChanged)
    self.sitterView.connect("select-all", self.selectionChanged)    
...
def selectionChanged(self, treeview):
    foo(self.sitterView.get_selection().get_selected())

ただし、コールバックから取得した選択は「遅延」しているようです。つまり、前のコールバックが完了した後の選択が表示されます。たとえば、行をCtrlキーを押しながらクリックし続けると、行が選択解除から選択された状態になると、fooには選択が与えられず、行が選択された状態から選択解除された状態になると、選択が与えられます。get_selection().get_selected()ただし、1秒後に電話をかけると、正しい選択ができます。これでどう対処するか考えてみませんか?

4

1 に答える 1

7

何が機能するかはわかりませんtoggle-cursor-rowが (ドキュメンテーションはイライラするほど空です)、それは処理するシグナルが間違っていると思います。

代わりに、GtkTreeSelectionchangedシグナルに接続する必要があります。すべての選択変更イベントを処理する必要があるため、他の信号に接続する必要もありません。

于 2010-09-17T03:55:13.870 に答える