在程序启动时,我想加载 5 列和 1000 行的 Wx.Grid。 并且,当 wx.grid 的垂直滚动条滚动到网格末尾时,我想再次追加 1000 行。
所以,我试图在到达网格末尾时捕获 wx.grid 垂直滚动条事件,并调用追加行函数。
但是,没有一个滚动条事件对我有用。!
我使用的版本:
问题代码: 对于具有 5 列和 1000 行的空网格,当滚动条到达网格末尾时,我尝试添加 1000 个空行。
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()
仅使用
wx.grid.Grid
而不使用wx.grid.GridTableBase
,您需要手动跟踪表中有多少行(我认为)。
您当前正在使用 wx.EVT_SCROLL 事件,这些事件用于独立滚动条。您应该使用
wx.ScrollWinEvent
。
以下内容应该会让您更接近目标。我还跟踪了 Down 和 Page Down 键,以防键盘输入并在开始时手动设置最后一行。
此处,设置为第 99 行,随后为第 199 行、第 299 行等
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)
self.myGrid = wx.grid.Grid(panel)
self.myGrid.CreateGrid(100, 5)
self.lastrow = 98
self.myGrid.SetColLabelValue(0, "Column1")
self.myGrid.SetColLabelValue(1, "Column2")
self.myGrid.SetColLabelValue(2, "Column3")
self.myGrid.SetColLabelValue(3, "Column4")
self.myGrid.SetColLabelValue(4, "Column5")
self.myGrid.SetDefaultColSize(width=100, resizeExistingCols=True)
self.myGrid.SetDefaultRowSize(height=30, resizeExistingRows=True)
self.myGrid.Bind(wx.EVT_SCROLLWIN, self.AddRows)
self.myGrid.Bind(wx.EVT_KEY_DOWN, self.OnKey)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.myGrid, 1, wx.EXPAND)
panel.SetSizer(sizer)
#self.Maximize()
def AddRows(self, event):
if self.myGrid.IsVisible(self.lastrow, 0):
self.myGrid.AppendRows(100, True)
self.lastrow += 100
self.Refresh()
print("Rows Added")
if event:
event.Skip()
def OnKey(self, event):
keycode = event.GetKeyCode()
if keycode == wx.WXK_DOWN or keycode == wx.WXK_PAGEDOWN:
self.AddRows(None)
event.Skip()
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm().Show()
app.MainLoop()
希望在愤怒中使用
wx.grid
的人能够发布更好的答案。