我有一个存储在 SQLite3 数据库中的大型数据集(日志数据)。我使用 Wx.listctrl 创建了一个 Python GUI,它显示来自查询的数据。它适用于少量数据,但显然挂在较大的集合上..因此我想实现以下两件事之一:
- 分页是在 listctrl 中显示前 5000 条记录,然后如果用户单击按钮,则显示下一个 5000 .. 依此类推.. 或者 - 当用户向下滚动 listctrl 时,它会不断填充新数据。 .
我将如何实现这些概念之一?在此先感谢您的帮助!
使其成为文档中所述的虚拟控件。列表视图将根据需要调用回调,以请求显示的特定行。
在不同的场景下,策略会有所不同。假设您只是将 wxPython 用于演示目的,并且您有一个单独的模块/包来处理数据。wxPython 控件仅从数据抽象层获取数据。
场景一:将所有日志数据加载到内存中,使用 wx.listctrl 或 wx.listview 显示行。
场景二:当 wx 视图更新时从数据库中获取数据。
在场景 I 中,您只需要设置一个变量来记住 UI 已读取的位置,或者如果您将日志加载为列表,您甚至可以简单地使用列表滑动。通过向下/向上滚动来自动更新视图可以在场景 I 中实现,因为所有数据都已加载并且不会再建立 sqlite db 连接。在方案 II 中通过向下/向上滚动来实现自动更新将是一个糟糕的选择,因为会有太多的数据库操作 - 想象一下您非常快速地向下滚动以期望获得第 5000 行?
在场景 II 中,您可以设置页面大小并使用 LIMIT/OFFSET 来获取您想要的数据集。您为偏移量保留另一个变量。使用变量 page_size 和 offset,您可以简单地获取数据并更新 wx 视图。这种情况特别适合限制内存使用。我不知道您的日志有多大,但毕竟将所有日志加载到内存中并不是一个好主意,因为日志不断增长,您可能还需要同时加载其他相对较大的数据集。