2011-08-22 6 views
7

Mam problem z Gtk.Treeview indide a Gtk.ScrolledWindow. Mam dużą ilość danych, które nie mieszczą się w mojej normalnej geometrii okien, więc umieszczam moje Treeview wewnątrz ScrolledWindow, co wydaje się być normalnym sposobem. Problem z tym rozwiązaniem polega na tym, że moje nagłówki kolumn znikają, gdy przewijam. To zachowanie wydaje mi się nieco ok, ponieważ ScrolledWindow powinien dbać o widżety w nim zawarte.Jak wyświetlić nagłówki kolumn w GtkTreeView wewnątrz gtk.ScrolledWindow?

Skąd mam uzyskać przewijanie mojego widoku drzewa? ORAZ pokazują nagłówki kolumn zawsze w pierwszym wierszu?

zmodyfikowałem przykład basictreeview.py reprezentować mój problem:

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

Czy możesz znaleźć aplikację, która to robi? Jeśli tak, najlepiej jest zajrzeć do kodu źródłowego. O ile wiem, nie ma prostego sposobu na zrobienie tego z GtkTreeView. – ptomato

Odpowiedz

11

Zmień self.scrolledwindow.add_with_viewport do self.scrolledwindow.add i będzie działać. Od the documentation:

Sposób add_with_viewport() służy do dodawania widgetu (podany przez dziecko) bez możliwości rodzimych przewijając do przewijane okno. Jest to funkcja wygody, która jest równoważna dodaniu elementu podrzędnego do gtk.Viewport, a następnie dodaniu widoku do przewijanego okna. Jeśli dziecko ma natywne przewijanie (np. Gtk.TextView, gtk.TreeView, gtk.Layout), użyj metody gtk.Container.add() zamiast tej metody.

gtk.TreeView „s«native przewijanie»trzyma nagłówki kolumn na górze, ale jeśli umieścić całą widget TreeView w gtk.Viewport, potem cała widget będzie przewijać.

+0

tak proste, jak miałem nadzieję, że będzie. dzięki! – Fookatchu

Powiązane problemy