我正在使用PyGTK TreeView(作爲列表)我的數據。有沒有什麼辦法通過去列表加載更多的數據點播。PyGTK如何「按需加載」數據到TreeView
例如:
我有數據庫表,其中有200 000條記錄。在應用程序啓動時,從表中加載200條記錄。當我滾動下載更多的數據到treeView。
我正在使用PyGTK TreeView(作爲列表)我的數據。有沒有什麼辦法通過去列表加載更多的數據點播。PyGTK如何「按需加載」數據到TreeView
例如:
我有數據庫表,其中有200 000條記錄。在應用程序啓動時,從表中加載200條記錄。當我滾動下載更多的數據到treeView。
我相信你能做到以下幾點:
添加空行到你的模型,我認爲你應該使用GtkListStore
對於樹狀細胞渲染器定義data function。
在數據函數中檢查當前模型行是否已加載,如果不是,則從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)
希望這會有所幫助,至於
這裏是如何我設法實現樹視圖的按需加載(列表) 我的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刷新時,睡眠用於暫停。
作品通過鍵盤導航,通過滾動條的鼠標拖動或點擊鼠標上的滾動按鈕 希望這會幫助別人