2011-03-01 20 views
2

我正在使用PyGTK TreeView(作为列表)我的数据。有没有什么办法通过去列表加载更多的数据点播PyGTK如何“按需加载”数据到TreeView

例如

我有数据库表,其中有200 000条记录。在应用程序启动时,从表中加载200条记录。当我滚动下载更多的数据到treeView。

回答

3

我相信你能做到以下几点:

  1. 添加空行到你的模型,我认为你应该使用GtkListStore

  2. 对于树状细胞渲染器定义data function

  3. 在数据函数中检查当前模型行是否已加载,如果不是,则从SQL加载它。我想你可以在这里兑现并且一次加载多行。

下面是如何设置的数据功能的例子:

cell = gtk.CellRendererText()   
column = gtk.TreeViewColumn('column0', cell, text=0) 
column.set_cell_data_func(cell, self.load_data) 
self.list.append_column(column) 

....

def load_data(self, column, cell, model, iter): 
    # load data for the given model row 
    print 'load data ' + model.get_value(iter, 0) 

希望这会有所帮助,至于

0

这里是如何我设法实现树视图的按需加载(列表) 我的Gtk.TreeView是Gtk.ScrolledWindow的一个孩子(曾经ything是建立与林间空地,但是这并不重要)

我建立了我的树视图渲染为塞尔said

cell = gtk.CellRendererText() 
col = gtk.TreeViewColumn("Column header text") 
col.pack_start(cell, True) 
col.set_attributes(cell,text=0) 
col.set_cell_data_func(cell, self._loadDataTest, treeView) 
treeView.append_column(col) 

函数来处理:

def _loadDataTest(self, column, cell, model, iter, widget): 
    pageSize = widget.get_parent().get_vadjustment().get_page_size()+20 
    adjGap = widget.get_parent().get_vadjustment().get_upper() - widget.get_parent().get_vadjustment().get_value() 
    if widget.is_focus() and model.get_path(iter)[0] >= len(model)-2 and adjGap < pageSize: 
     for i in range(0, 20): #simulate additional data 
      model.append(["row%s"%len(model)-1]) 
     time.sleep(0.05) #to pause execution for a while, no need to add data fow times 

现在,新数据当“pre-last”(从底部开始)行可见并且scrollBar几乎处于底部时加载。在我的情况下,当gtk.widgets刷新时,睡眠用于暂停。

作品通过键盘导航,通过滚动条的鼠标拖动或点击鼠标上的滚动按钮scrollbar button 希望这会帮助别人