2 つのツリービューを互いに重ねて、列を揃えたいと考えています。これを行う方法は、gtk.SizeGroup
何とか a を使用することだと思いました。ただし、gtk.TreeViewColumn
ウィジェットではありません...どうすればこれを行うことができますか?
2 に答える
1
私は2つの提案があります:
- がどのよう
gtk.SizeGroup
に実装されているかを見て、独自に作成できるかどうかを確認してくださいTreeViewColumnSizeGroup
。 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 に答える