2012-04-04 165 views
1

我有一個存儲在SQLite3數據庫中的大型數據集(日誌數據)。我使用Wx.listctrl創建了一個Python GUI,用於顯示查詢中的數據。它適用於少量的數據,但顯然掛在較大的集合..因此,我想執行兩件事之一:從Python中的Sqlite數據庫顯示大型數據集wx

-paging是第一個5000條記錄顯示在listctrl然後如果用戶單擊一個按鈕下一個5000顯示..等等等等.. 或 - 作爲用戶向下滾動的listctrl它不斷地用新的數據填充..這些概念

我將如何實現呢?先謝謝您的幫助!

回答

1

使其成爲虛擬控件,如the docs中所述。該列表視圖將根據需要調用回調以請求顯示的特定行。

0

在不同的情況下,策略會有所不同。假設你只是使用wxPython作爲演示目的,並且你有一個單獨的模塊/包來處理數據。 wxPython控件僅從數據抽象層獲取數據。

情景I:將所有日誌數據加載到內存中,並使用wx.listctrl或wx.listview來顯示行。

場景二:更新wx視圖時從數據庫獲取數據。

在場景I中,您只需設置一個變量即可記住用戶界面已經讀取的位置,或者即使您將日誌作爲列表加載,也可以簡單地使用列表滑動。通過向下滾動/向上自動更新視圖可以在場景I中實現,因爲所有數據都已加載,並且不會再創建sqlite數據庫連接。在場景II中通過向下滾動/向上滾動來實現自動更新是一個不好的選擇,因爲會有太多的數據庫操作 - 想象你很快滾動下來期望獲得第5000行?

在場景II中,您可以設置頁面大小並使用LIMIT/OFFSET來獲取所需的數據集。你保留另一個變量的偏移號碼。通過變量page_size和offset,您可以簡單地獲取數據並更新wx視圖。這種情況對於限制內存使用特別有用。我不知道你的日誌有多大,但畢竟把它全部加載到內存中並不是一個好主意,因爲日誌不斷增長,你可能還需要同時加載其他相對較大的數據集。

+0

我正在尋找一個導師,我會付出教給我一些這些東西(通過webex)..它只是讓我長期得到這個東西我自己做,我需要一些方向.. obv for pay 。你有興趣嗎? – user1314011 2012-04-05 15:43:42

+0

很抱歉,我太忙了,不能成爲你的導師。我相信你會在你身邊找到一個擅長wxPython的人。感謝您的詢問;-) – user866903 2012-04-06 03:03:37