PyGTK如何向TreeView“加载按需”数据

时间:2011-03-01 13:52:58

标签: python listview gtk gtktreeview

我正在使用PyGTK TreeView(作为列表)来处理我的数据。是否可以通过列表加载更多数据按需

例如

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

2 个答案:

答案 0 :(得分:3)

我相信你可以做到:

  1. 在模型中添加空行,我相信您应该使用GtkListStore

  2. 对于树视图单元格渲染器,定义data function

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

  4. 以下是如何设置数据功能的示例:

    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)
    

    希望这有帮助,尊重

答案 1 :(得分:0)

以下是我如何设法实现树视图的按需加载(列表) 我的Gtk.TreeView是Gtk.ScrolledWindow的孩子(一切都是用林间空地建造的,但这并不重要)

我已将树视图渲染设置为Serge 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

现在,当“前一个”(从底部开始)行可见并且scrollBar几乎位于底部时,将加载新数据。在我的例子中,睡眠用于在刷新gtk.widgets时暂停。

通过键盘导航,通过鼠标拖动滚动条或鼠标单击滚动条按钮scrollbar button来工作 希望这会帮助某人