2011-08-22 25 views
7

Gtk.TreeviewインディードGtk.ScrolledWindowに問題があります。私はノーマルウィンドウジオメトリの中に収まりきらない大量のデータを持っているので、私は通常の方法であると思われるScrolledWindowの中にツリービューを入れます。このソリューションの問題は、私がスクロールすると、私の列見出しが消えてしまうことです。 ScrolledWindowはその内部のウィジェットを気にする必要があるので、この動作は多少私にとっては大丈夫です。gtk.ScrolledWindow内のGtkTreeViewで列見出しを表示するには?

したがって、ツリービューをスクロール可能にするにはどうすれば列ヘッダーが常に最初の行に表示されますか?

私は私の問題を表現するためにbasictreeview.py変形例:self.scrolledwindow.addに変更self.scrolledwindow.add_with_viewport

#!/usr/bin/env python 

# example basictreeview.py 

import pygtk 
pygtk.require('2.0') 
import gtk 

class BasicTreeViewExample: 

    # close the window and quit 
    def delete_event(self, widget, event, data=None): 
     gtk.main_quit() 
     return False 

    def __init__(self): 
     # Create a new window 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     self.window.set_title("Basic TreeView Example") 
     self.window.set_size_request(200, 200) 
     self.window.connect("delete_event", self.delete_event) 

     # create a TreeStore with one string column to use as the model 
     self.liststore = gtk.ListStore(str) 

     # we'll add some data now - 4 rows with 3 child rows each 
     for i in range(10): 
      self.liststore.append([str(i)]) 

     # create the TreeView using treestore 
     self.treeview = gtk.TreeView(self.liststore) 

     # create the TreeViewColumn to display the data 
     self.tvcolumn = gtk.TreeViewColumn("Column-Name", gtk.CellRendererText(), text=0) 

     # add tvcolumn to treeview 
     self.treeview.append_column(self.tvcolumn) 

     # make it searchable 
     self.treeview.set_search_column(0) 

     # Allow sorting on the column 
     self.tvcolumn.set_sort_column_id(0) 

     # Allow drag and drop reordering of rows 
     self.treeview.set_reorderable(True) 

     # Add Treeview to a ScrolledWindow 
     self.scrolledwindow = gtk.ScrolledWindow(hadjustment=None, vadjustment=None) 
     self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
     self.scrolledwindow.add_with_viewport(self.treeview) 

     self.window.add(self.scrolledwindow) 

     self.window.show_all() 

def main(): 
    gtk.main() 

if __name__ == "__main__": 
    tvexample = BasicTreeViewExample() 
    main() 
+0

これを行うアプリケーションが見つかりましたか?もしそうなら、あなたの最善の策はソースコードを見ることです。私が知る限り、GtkTreeViewでこれを行う簡単な方法はありません。 – ptomato

答えて

11

、それが動作します。 the documentationから:

add_with_viewport()メソッドは、スクロールウィンドウにネイティブスクロール機能なし(子によって指定された)ウィジェットを追加するために使用されます。これは、gtk.Viewportに子を追加した後、スクロールしたウィンドウにビューポートを追加するのと同等の便利な機能です。子供がネイティブなスクロールをしている場合(gtk.TextView、gtk.TreeView、gtk.Layoutなど)は、このメソッドの代わりにgtk.Container.add()を使用します。

gtk.TreeViewの「ネイティブスクロールは「先頭に列ヘッダーを保持しますが、あなたは最初gtk.Viewport全体ツリービューウィジェットを置く場合は、全体のウィジェットがスクロールします。

+0

私はそれができることを望みました。ありがとう! – Fookatchu

関連する問題