0

2 つのツリービューを互いに重ねて、列を揃えたいと考えています。これを行う方法は、gtk.SizeGroup何とか a を使用することだと思いました。ただし、gtk.TreeViewColumnウィジェットではありません...どうすればこれを行うことができますか?

4

2 に答える 2

1

私は2つの提案があります:

  1. がどのようgtk.SizeGroupに実装されているかを見て、独自に作成できるかどうかを確認してくださいTreeViewColumnSizeGroup
  2. notify::width各列のに接続し、コールバックで他のツリービューの対応する列の幅を設定します。
于 2010-10-22T06:39:08.200 に答える
0

更新:これは機能した最後のコードです。ループでは、両方のビュー列を同時に作成しているので、次の行で十分です。

col1.connect("notify::width", lambda col1,_,col2:col2.set_fixed_width(
    col1.get_width()), col2)

gtk.gdk.Drawable「列ウィジェット」がない理由は、メインエリアが各セルレンダラーが描画する場所にすぎないためだと思います。ただし、各列にはウィジェットであるヘッダーがあるため、それらを使用して必要な処理を実行できます。

1つのビューを「メイン」ビューとして選択し、もう1つのビューをgtk.TREE_VIEW_COLUMN_FIXEDサイズ設定に設定します。.forall()'メイン'ビューの内部子ウィジェットを通過するために使用します。これらはgtk.Buttons列ヘッダーを表します。size-allocate彼らのイベントに接続します。そのイベントハンドラーで、要求された幅と.set_fixed_width、スレーブビューの対応する列を取得します。

    self._svcols = []
    def sizealloc(wid, alloc):
        ci = self._svcols.index(wid)
        cl = self.slaveView.get_column(ci)
        cl.set_fixed_width(alloc.width)

    def resizes(child):
        child.connect('size-allocate', sizealloc)
        self._svcols.append(child)

    self.mainView.forall(resizes)

これは、列ヘッダーが表示されていない場合でも機能します。

于 2010-10-22T17:38:58.190 に答える