シンプルwx.grid.Grid
でwx.grid.GridCellChoiceEditor
デフォルトのセルエディターが与えられます。グリッドを下にスクロールして、空のセルで編集を開始してみてください。ここで、セルに値があれば、すべて問題ありません。ただし、セルが空の場合、ComboBox の TextCtrl が間違った場所に描画されます。垂直スクロールオフセットが2回減算されているようです。サンプル アプリのソース コード。
WX バージョン 2.9.4.0
シンプルwx.grid.Grid
でwx.grid.GridCellChoiceEditor
デフォルトのセルエディターが与えられます。グリッドを下にスクロールして、空のセルで編集を開始してみてください。ここで、セルに値があれば、すべて問題ありません。ただし、セルが空の場合、ComboBox の TextCtrl が間違った場所に描画されます。垂直スクロールオフセットが2回減算されているようです。サンプル アプリのソース コード。
WX バージョン 2.9.4.0
回避策として、エディターが表示されようとしているときに空でない値を設定するようになりました。を使用しwx.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()
また、実際のサンプルのソース コードも含まれています。