2011-08-22 21 views
7

我有一个问题Gtk.Treeview indide a Gtk.ScrolledWindow。我有大量的数据,这不适合我的正常窗口几何图形,所以我把我的Treeview放在ScrolledWindow里面,这似乎是正常的方式。这个解决方案的问题是,当我滚动时,我的列标题消失了。这种行为对我来说似乎有些不妥,因为ScrolledWindow应该关心它里面的小部件。如何在gtk.ScrolledWindow中的GtkTreeView中显示列标题?

那么,我该如何让我的Treeview可以滚动AND总是在第一行显示列标题?

我修改了basictreeview.py例子来表示我的问题:

#!/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

变化self.scrolledwindow.add_with_viewportself.scrolledwindow.add,它会工作。从the documentation

的add_with_viewport()方法用于没有本机的滚动功能,以滚动窗口添加窗口小部件(由子指定)。这是一个方便的功能,相当于将子项添加到gtk.Viewport,然后将视口添加到滚动的窗口。如果孩子有本地滚动(例如gtk.TextView,gtk.TreeView,gtk.Layout),请使用gtk.Container.add()而不是此方法。

gtk.TreeView的‘本土滚动’保持列标题上方,但如果你把整个的TreeView控件在gtk.Viewport第一,那么整个部件将滚动。

+0

就像我希望的那样简单。谢谢! – Fookatchu

相关问题