6

gtk.TreeViewColumn.set_resizable(True)列を手動でサイズ変更可能にするために使用できます...最後の列を除いて、常に利用可能なスペースを占有します。

ほとんどの場合は賢明ですが、私は TreeView-in-a-ScrolledView を使用しており、最後の列も縮小/拡大できるようにしたいと考えています。

現在、私は次のクラッジを使用しています:

def add_dummy_column(treeview):

    def put_dummy_last(treeview, dummy):
        columns = treeview.get_columns()
        last = next(reversed(columns), None)
        if not last or last == dummy:
            return
        if dummy in columns:
            treeview.move_column_after(dummy, last)
        else:
            treeview.append_column(dummy)

    dummy = gtk.TreeViewColumn()
    dummy.set_min_width(1)
    dummy.set_fixed_width(1)
    dummy.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
    dummy.set_resizable(False)
    dummy.set_expand(False)
    treeview.connect('columns-changed', put_dummy_last, dummy)
    return dummy

ただし、このダミー列は常に邪魔になる傾向があります。TreeView列のループなどが複雑になります。より良い/よりエレガントなソリューションはありますか?

更新:実際に機能します

最小限の例を偽造しようとしているときに、私の手間がなくても問題なく動作することがわかりました。gtk.ScrolledWindow を使用しない最小限の例を次に示します。

import gtk

window = gtk.Window()
window.connect('destroy', lambda *args: gtk.main_quit())

vbox = gtk.VBox()
window.add(vbox)

table = gtk.TreeView(gtk.ListStore(str, str, str))

for i in range(3):
    column = gtk.TreeViewColumn('Column {}'.format(1 + i))
    column.set_resizable(True)
    column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
    column.set_min_width(20)
    column.set_fixed_width(80)
    column.set_expand(False)
    table.append_column(column)

vbox.pack_start(table)

vbox.pack_start(gtk.Statusbar(), False)

window.set_default_size(300, 300)
window.show_all()
gtk.main()

最後の列を縮小してみてください。それは不可能です。ただし、変更する場合は

vbox.pack_start(table)

container = gtk.ScrolledWindow()
vbox.pack_start(container)
container.add(table)

最後の列を問題なく拡大および縮小できます。

4

1 に答える 1

2

私たちが遊ぶことができる自己完結型の実用的な例を投稿していただければ、支援が容易になります! :)

ただし、あなたの質問を正しく理解している場合 (正直なところ、100% 確信が持てません)、問題を間違った言葉で考えている可能性があります。「最後の列のサイズ変更」と呼ばれるものは、実際には「ツリービュー コンテナのサイズを変更します。」

その場合は、スクロールされたウィンドウとツリービューの間にサイズ変更可能なコンテナーを追加するだけです。

チッ!

于 2011-07-23T09:10:23.620 に答える