创建一个自定义wx.frame以包含内部具有两个网格控件的分离器窗口。它用于比较每个网格中的数据。此时两个网格的滚动条需要支持同步滚动。如何同步wx中两个网格的滚动条
问题:
- 如何获得这两个网格的滚动事件?我试图在框架中装入wx.EVT_SCROLL事件,但失败了。我也尝试绑定自定义网格控件中的滚动事件,但它也失败了。
- 如何同步滚动两个网格的滚动条?一个相对question的回答使用gridInstance.Scroll(row,col)来滚动网格客户端窗口。但它不包含如何同步滚动条。
非常感谢您的任何建议。
定制帧
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, title='', size=(640,480))
main_panel = wx.Panel(self, -1)
self.TBFLAGS = (wx.TB_HORIZONTAL| wx.NO_BORDER| wx.TB_FLAT)
self.controller = None
self.isSyncScroll = True
#hsizer = wx.BoxSizer(wx.VERTICAL)
gsizer = wx.FlexGridSizer(rows = 1,
cols = 1,
vgap = 2,
hgap = 2)
gsizer.AddGrowableRow(0)
gsizer.AddGrowableCol(0)
self.tb = self.init_toolbar()
(sub_panel0, sub_panel1) = self.init_splitter(main_panel)
self.grid0 = self.init_grid(sub_panel0)
self.grid1 = self.init_grid(sub_panel1)
self.init_status_bar()
gsizer.Add(main_panel, 1, wx.EXPAND)
self.SetSizer(gsizer)
ico = wx.Icon(u'Compare.ico', wx.BITMAP_TYPE_ICO)
self.SetIcon(ico)
self.Maximize()
#can't catch the scroll event at the frame
self.Bind(wx.EVT_SCROLL, self.OnScroll, self.grid0)
#self.Bind(wx.EVT_SCROLL, self.OnScroll)
#self.Bind(wx.EVT_SCROLL, self.OnScroll, id=self.grid0.GetId())
为什么不把所有的数据并排放在同一个网格中? – Arthur 2013-04-08 09:16:53
客户是什么......所以,它必须。数据列将会像winmerge一样比较,并添加虚拟列来匹配相等的列。 – Erxin 2013-04-09 01:13:05
除了同步滚动两个网格的滚动条以外,还实现了所有其他功能。这似乎是一个常见问题,已经有人[问](http://stackoverflow.com/questions/11269558/wxgrid-detecting-scroll-event)如何检测滚动事件。我只能找出如何绑定网格窗口中的鼠标滚轮事件。 – Erxin 2013-04-09 01:17:54