2011-08-22 41 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

相關問題