【发布时间】:2013-03-30 00:33:00
【问题描述】:
创建一个自定义 wx.frame 以包含一个拆分器窗口,其中包含两个网格控件。它用于比较每个网格中的数据。此时两个网格的滚动条需要支持同步滚动。
问题:
- 如何获取这两个网格的滚动事件?我试图在框架上绑定 wx.EVT_SCROLL 事件但失败了。我也尝试在自定义网格控件中绑定滚动事件,也失败了。
- 如何同步滚动两个网格的滚动条?提到使用 gridInstance.Scroll(row, col) 滚动网格客户端窗口的相对 question 的答案。但它不包含如何同步滚动条。
非常感谢您的任何建议。
自定义框架的init方法
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())
【问题讨论】:
-
为什么不将所有数据并排放在同一个网格中?
-
客户这是什么......所以,它必须。数据列将像 winmerge 一样进行比较并添加虚拟列以匹配对齐相等的列。
-
实现了除了同步滚动两个网格的滚动条之外的所有其他功能。这似乎是一个普遍的问题,已经有someone asked 如何检测滚动事件。我只能从网格窗口中找出如何绑定鼠标滚轮事件。
标签: python grid scrollbar sync wxwidgets