Python PyGTK如何;“按需加载”;数据到TreeView

Python PyGTK如何;“按需加载”;数据到TreeView,python,listview,gtk,gtktreeview,Python,Listview,Gtk,Gtktreeview,我正在使用PyGTK TreeView(作为列表)作为我的数据。有没有办法通过浏览列表来按需加载更多数据 例如: 我有一个数据库表,其中有200000条记录。在应用程序启动时-从表中加载200条记录。当我滚动下载更多数据到treeView时。我相信您可以做到以下几点: 在模型中添加空行,我认为您应该使用 对于treeview单元渲染器,定义一个 在数据函数中,检查当前模型行是否已加载,如果未加载,则从SQL加载。我想您可以在这里使用现金,一次加载多行 下面是如何设置数据功能的示例: cell =

我正在使用PyGTK TreeView(作为列表)作为我的数据。有没有办法通过浏览列表来按需加载更多数据

例如:


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

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

  • 在模型中添加空行,我认为您应该使用

  • 对于treeview单元渲染器,定义一个

  • 在数据函数中,检查当前模型行是否已加载,如果未加载,则从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)
    


    希望这有帮助,这里是我如何实现treeview(列表)的按需加载 我的Gtk.TreeView是Gtk.ScrolledWindow的孩子(所有东西都是用glade构建的,但这并不重要)

    我已将我的treeview渲染设置为Serge:

    要处理的函数:

    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
    
    def\u loadDataTest(self、column、cell、model、iter、widget):
    pageSize=widget.get\u parent().get\u vadjustment().get\u page\u size()+20
    adjGap=widget.get\u parent().get\u vadjustment().get\u upper()-widget.get\u parent().get\u vadjustment().get\u value()
    如果widget.is_focus()和model.get_path(iter)[0]>=len(model)-2和adjGap
    现在,当“pre-last”(从底部算起的第二个)行可见并且滚动条几乎位于底部时,就会加载新数据。在我的例子中,sleep用于在gtk.widgets刷新时暂停

    通过键盘导航、鼠标拖动滚动条或鼠标单击滚动条按钮进行工作 希望这能帮助别人

    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