2011-08-22 22 views
7

Tôi gặp sự cố với Gtk.Treeview ở một số Gtk.ScrolledWindow. Tôi có một lượng lớn dữ liệu, không phù hợp với hình học cửa sổ bình thường của tôi, vì vậy tôi đặt Treeview của tôi bên trong một ScrolledWindow, có vẻ như là cách thông thường. Vấn đề với giải pháp này là, Tiêu đề cột của tôi biến mất, khi tôi cuộn. Hành vi này có vẻ hơi ổn với tôi, vì ScrolledWindow nên quan tâm đến các tiện ích bên trong nó.Làm cách nào để hiển thị tiêu đề cột trong GtkTreeView bên trong gtk.ScrolledWindow?

Vì vậy, làm cách nào để có được Số lần xem trang của tôi có thể cuộn được hiển thị tiêu đề cột luôn ở hàng đầu tiên?

tôi sửa đổi ví dụ basictreeview.py để đại diện cho vấn đề của tôi:

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

Bạn có thể tìm thấy ứng dụng thực hiện việc này không? Nếu vậy, đặt cược tốt nhất của bạn là tìm mã nguồn. Theo tôi biết, không có cách nào dễ dàng để làm điều này với GtkTreeView. – ptomato

Trả lời

11

Thay đổi self.scrolledwindow.add_with_viewport-self.scrolledwindow.add và nó sẽ làm việc. Từ the documentation:

Phương thức add_with_viewport() được sử dụng để thêm tiện ích (được chỉ định bởi trẻ em) mà không có khả năng cuộn gốc tới cửa sổ được cuộn. Đây là một chức năng tiện lợi tương đương với việc thêm con vào gtk.Viewport, sau đó thêm khung nhìn vào cửa sổ được cuộn. Nếu một đứa trẻ có cuộn gốc (ví dụ: gtk.TextView, gtk.TreeView, gtk.Layout), hãy sử dụng gtk.Container.add() thay cho phương thức này.

gtk.TreeView 's 'có nguồn gốc di chuyển' giữ các tiêu đề cột ở phía trên, nhưng nếu bạn đưa toàn bộ phụ tùng treeview trong một gtk.Viewport đầu tiên, sau đó toàn bộ widget sẽ di chuyển.

+0

dễ dàng như tôi mong đợi. cảm ơn! – Fookatchu