给定一个简单wx.grid.Grid
的wx.grid.GridCellChoiceEditor
默认单元格编辑器。现在尝试在网格中向下滚动并开始在空单元格上进行编辑。现在,如果单元格有值,一切都会好起来的。但是,当单元格为空时,ComboBox 的 TextCtrl 被绘制在错误的位置。似乎垂直滚动偏移量被减去了两次。示例应用程序的源代码。
WX 版本 2.9.4.0
给定一个简单wx.grid.Grid
的wx.grid.GridCellChoiceEditor
默认单元格编辑器。现在尝试在网格中向下滚动并开始在空单元格上进行编辑。现在,如果单元格有值,一切都会好起来的。但是,当单元格为空时,ComboBox 的 TextCtrl 被绘制在错误的位置。似乎垂直滚动偏移量被减去了两次。示例应用程序的源代码。
WX 版本 2.9.4.0
作为一种解决方法,我现在在即将显示编辑器时设置一个非空值。使用 awx.CallAfter
我将值再次设置为空,因此用户不会注意到任何内容。但是,网格中的值将保持为非空值(空格),因为在回调中更改它会触发不正确的重新渲染。
def __init__(...):
# ...
self.grid1.Bind(wx.grid.EVT_GRID_EDITOR_CREATED, self.editor_created)
self.grid1.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.editor_shown)
def editor_created(self, event):
self.control = event.GetControl()
event.Skip()
def editor_shown(self, event):
cursor = event.Row, event.Col
value = self.grid1.GetCellValue(*cursor)
if not value:
self.grid1.SetCellValue(cursor[0], cursor[1], ' ')
def unfix():
self.control.SetValue(value)
self.control.Popup()
# @todo should set the cell value back to empty value here,
# but that triggers the bug again.
wx.CallAfter(unfix)
event.Skip()
还有一个工作示例的源代码。