我想加载一个 csv 文件(10 列,1 000 000 行)到 wx.Grid 并自动调整行大小。 自动调整 100 万行大小所需的时间太多(>1 小时,具体取决于数据)。
所以我想给wx.Grid实现分页功能。
我的想法:
1:使用wx.grid垂直滚动条
2:使用菜单选项或按钮
1 的代码: 创建了没有数据的空样本网格。 尝试使用滚动条滚动底部事件来触发 AddRows 函数: (但它不适用于任何滚动条事件,我尝试过)
import wx
import wx.grid
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title="A Simple Grid")
panel = wx.Panel(self)
myGrid = MyGrid(panel)
myGrid.fillGrid()
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(myGrid, 1, wx.EXPAND)
panel.SetSizerAndFit(sizer)
self.Maximize()
class MyGrid(wx.grid.Grid):
def __init__(self, parent):
wx.grid.Grid.__init__(self, parent)
def fillGrid(self):
self.CreateGrid(1000, 10)
self.SetColLabelValue(0, "Column1")
self.SetColLabelValue(1, "Column2")
self.SetColLabelValue(2, "Column3")
self.SetColLabelValue(3, "Column4")
self.SetColLabelValue(4, "Column5")
self.SetColLabelValue(5, "Column6")
self.SetColLabelValue(6, "Column7")
self.SetColLabelValue(7, "Column8")
self.SetColLabelValue(8, "Column9")
self.SetColLabelValue(9, "Column10")
self.SetDefaultColSize(width=350, resizeExistingCols=True)
self.SetDefaultRowSize(height=30, resizeExistingRows=True)
# Any proper Scroll Bar Event to Trigger Add new rows.
self.Bind(wx.EVT_SCROLL_BOTTOM, self.AddRows)
def AddRows(self, event):
self.AppendRows(1000, True)
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()
总结:
以我有限的 WxPython 经验,我无法正确实现上述任何想法。
我需要一个有效的实现来实现上述 wx.grid 分页的想法。
请提出其他可能的想法来实现我对分页功能的需求。
版本:
为wx.Grid实现分页功能。 使用菜单选项(页)
第二个想法的代码:
# This python code is to load grid using paging functionality via Menu Option
# New Menu Option Page is created with SubMenu "Next (Ctrl + N)"
# Initially when triggering Grid, Loads only 25000 rows
# When clicked on next button in Page Menu, it loads another 10000 rows
import wx
import wx.grid
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title="Grid Paging via Menu Option")
menubar = wx.MenuBar()
page_menu = wx.Menu()
menubar.Append(page_menu, "Page")
next_item = wx.MenuItem(page_menu, wx.ID_EXIT, '&Next\tCtrl+N')
page_menu.Append(next_item)
self.Bind(wx.EVT_MENU, self.loadNextCells, next_item)
panel = wx.Panel(self)
self.myGrid = MyGrid(panel)
self.myGrid.fillGrid()
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.myGrid, 1, wx.EXPAND)
panel.SetSizerAndFit(sizer)
self.SetMenuBar(menubar)
self.Maximize()
def loadNextCells(self, e):
MyGrid.AddRows(self.myGrid)
class MyGrid(wx.grid.Grid):
def __init__(self, parent):
wx.grid.Grid.__init__(self, parent, style=wx.HSCROLL | wx.VSCROLL)
self.rowCount = None
def fillGrid(self):
self.CreateGrid(25000, 7)
self.SetDefaultColSize(width=350, resizeExistingCols=True)
self.SetSelectionMode(selmode=self.GridSelectRows)
def AddRows(self):
self.AppendRows(10000, True)
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()