2011-08-22 17 views
7

Gtk.Treeview indide a Gtk.ScrolledWindow ile ilgili bir sorunum var. Normal pencere geometrilerimin içine sığmayan büyük miktarda veriye sahibim, bu yüzden Treeview'imi normal yoldan görünen bir ScrolledWindow içine koydum. Bu çözümle ilgili sorun, kaydırma yaptığımda, Sütun Başlıklarımın reddedilmesi. Bu davranış ScrolledWindow'un içindeki widget'ları önemsemesi gerektiğinden bana biraz açık gibi görünüyor.Bir gtk.ScrolledWindow içinde bir GtkTreeView içinde sütun başlıkları nasıl gösterilir?

Peki, Treeview'imi kaydırılabilir VE sütun başlıklarını her zaman ilk satırda göstermek için nasıl alabilirim?

Ben sorunumu temsil etmek basictreeview.py değiştirilmiş bir örnek: self.scrolledwindow.add_with_viewport self.scrolledwindow.add için

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

Bunu yapan bir uygulama bulabilir misiniz? Eğer öyleyse, en iyi bahsiniz kaynak koduna bakmaktır. Bildiğim kadarıyla, bunu GtkTreeView ile yapmanın kolay bir yolu yok. – ptomato

cevap

11

Değiştir ve işe yarayacak. the documentation Gönderen:

add_with_viewport() yöntemi kaydırılan pencereye yerli kaydırma yetenekleri olmadan (çocuk tarafından belirlenen) bir widget eklemek için kullanılır. Bu, bir gtk.Viewport öğesine alt öğenin eklenmesiyle eşdeğer bir kolaylık işlevidir ve ardından görüntülenen pencereye görünüm penceresinin eklenmesidir. Bir çocuğun yerel kaydırması varsa (ör. Gtk.TextView, gtk.TreeView, gtk.Layout), bu yöntem yerine gtk.Container.add() öğesini kullanın.

gtk.TreeView 'ın 'yerli kaydırma' üstündeki sütun başlıklarını tutar, ancak önce bir gtk.Viewport bütün ağaç widget'ı koyarsanız, daha sonra tüm Widget kayacaktır.

+0

umduğum kadar kolay. Teşekkürler! – Fookatchu

İlgili konular