2011-07-23 6 views
5

gtk.TreeViewColumn.set_resizable(True)を使用すると、列を手動でサイズ変更可能にすることができます...最後の列を除いて - 常に使用可能な領域を占有します。最後のgtk.TreeViewColumnをサイズ変更するには?

ほとんどの場合、私は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() 

最後の列を縮小しようとします。しかし、あなたが

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

vbox.pack_start(table) 

を変更する場合は、拡張し、問題なく最後の列を縮小することができます。

答えて

2

私たちが一緒に遊べる自己完結型の実例を投稿すると助けが簡単になります! :)

あなたの質問を正しく理解していれば(私は100%確信しているわけではありませんが正直です)、間違った言葉で問題を考えているかもしれません。最後の列 "は実際には"ツリービューコンテナのサイズ変更 "です。

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

HTH!

+0

最小限の例を作成するためのあなたの賢明なアドバイスは、上記を参照してください.-) –

+0

恐ろしいです!しかし、あなたの質問への答えにあなたの "答え"を移動し、あなたの答えを "受け入れ"として選択する必要があります。このようにして、あなたの質問が「解決済み」と表示され、将来の訪問者に役立ちます。これはまた、「自己学習者バッジ」を得るための第一歩です! :) – mac

+0

私はGTK3で作業していましたが、ScrolledWindow内のTreeViewを使用していました。私は必要なだけ列を展開することができません(または、列が常にコンテナをオーバーフローするため)。あなたは、ユーザーが列を所望のサイズに拡大または縮小することを可能にする実際の例を用いて拡張することができますか?また、すべてのセルの位置をデフュルトで表示します – ThorSummoner

関連する問題