At the launch of the program I want to load Wx.Grid with 5 cols and 1000 rows. And, I want to append 1000 rows again, when vertical scrollbar of wx.grid is scrolled to end of grid.
So, I'm trying to catch wx.grid vertical scrollbar event when reached end of grid, and call append rows function.
But, none of the scrollbar events are working for me.!
Versions I'm using:
- Windows V20H2
- Python 3.10.8
- WxPython 4.2.0
Problem code: For an empty grid with 5 cols and 1000 rows, I'm trying to add 1000 more empty rows, when scrollbar reaches end of grid.
import wx
import wx.grid
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title="To Append Rows")
panel = wx.Panel(self)
global myGrid
myGrid = wx.grid.Grid(panel)
myGrid.CreateGrid(1000, 5)
myGrid.SetColLabelValue(0, "Column1")
myGrid.SetColLabelValue(1, "Column2")
myGrid.SetColLabelValue(2, "Column3")
myGrid.SetColLabelValue(3, "Column4")
myGrid.SetColLabelValue(4, "Column5")
myGrid.SetDefaultColSize(width=500, resizeExistingCols=True)
myGrid.SetDefaultRowSize(height=30, resizeExistingRows=True)
# None the below events work to catch a scroll bar event and trigger append rows.
myGrid.Bind(wx.EVT_SCROLL_BOTTOM, self.AddRows)
myGrid.Bind(wx.EVT_SCROLL_ENDSCROLL, self.AddRows)
myGrid.Bind(wx.EVT_SCROLL, self.AddRows)
myGrid.Bind(wx.EVT_SCROLLBAR, self.AddRows)
myGrid.Bind(wx.EVT_SCROLL_PAGEDOWN, self.AddRows)
myGrid.Bind(wx.EVT_SCROLLWIN_BOTTOM, self.AddRows)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(myGrid, 1, wx.EXPAND)
panel.SetSizerAndFit(sizer)
self.Maximize()
def AddRows(self, event):
print(event.GetEventObject())
myGrid.AppendRows(1000, True)
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()