2011-08-22 3 views
7

Gtk.Treeview 인디 드 Gtk.ScrolledWindow에 문제가 있습니다. 대용량의 데이터가 있는데 보통의 창 지오 메트릭 안에 들어 맞지 않으므로 내 Treeview를 ScrolledWindow 안에 넣습니다. 이것은 정상적인 방법 인 것 같습니다. 이 솔루션의 문제점은 스크롤 할 때 열 머리글이 사라지는 것입니다. 이 문제는 내게 다소 어색해 보인다. ScrolledWindow은 내부의 위젯에주의해야하기 때문이다.gtk.ScrolledWindow 내부의 GtkTreeView에서 열 머리글을 표시하는 방법은 무엇입니까?

그럼 Treeview를 스크롤 할 수있게하려면 열 머리글은 항상 첫 번째 행에 표시합니까?

나는 내 문제를 표현하기 위해 basictreeview.py 변형 예 : self.scrolledwindow.add_with_viewport self.scrolledwindow.add

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

변경을하고 그것을 작동합니다. the documentation에서 :

add_with_viewport() 메소드는 스크롤 창에 기본 스크롤 기능없이 (아이에 의해 지정)에 위젯을 추가하는 데 사용됩니다. 이것은 gtk.Viewport에 자식을 추가 한 다음 스크롤 된 창에 뷰포트를 추가하는 것과 같은 편의 기능입니다. 하위에 기본 스크롤이있는 경우 (예 : gtk.TextView, gtk.TreeView, gtk.Layout)이 메소드 대신 gtk.Container.add()를 사용하십시오.

gtk.TreeView의 "기본 스크롤"상단에있는 열 머리글을 유지하지만 당신이 먼저 gtk.Viewport에서 전체 트 리뷰 위젯을 넣을 경우, 다음 전체 위젯은 스크롤됩니다.

+0

나는 그것이되기를 바랐다. 감사! – Fookatchu

관련 문제