3

我正在为我的数据使用 PyGTK TreeView(作为列表)。有什么方法可以通过列表按需加载更多数据。

例如

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

4

2 回答 2

3

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

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

  2. 为树视图单元格渲染器定义一个数据函数

  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)

希望这会有所帮助,问候

于 2011-03-02T03:38:00.827 回答
0

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

正如 Serge所说,我已经设置了我的树视图渲染:

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”(倒数第二个)行可见并且滚动条几乎位于底部时,将加载新数据。就我而言,睡眠用于在刷新 gtk.widgets 时暂停。

通过键盘导航、鼠标拖动滚动条或鼠标单击滚动条按钮来工作滚动条按钮 希望这对某人有所帮助

于 2011-03-03T11:29:08.023 回答