我想在wxGrid中只选择一行。
可以在wxGrid中禁用多选吗?
我试过SetSelectionMode
,它帮助我只选择行。但我不能用它来进行单行选择。
答案 0 :(得分:0)
捕获wxEVT_GRID_SELECT_CELL事件。
使用GetSelectedRows()获取所选行的数组。
如果选择了多行 -
答案 1 :(得分:0)
wx.EVT_MOTION(self.grid.GetGridWindow(), self.OnMouseMotion)
wx.EVT_LEFT_DOWN(self.grid.GetGridWindow(), self.OnMouseLeftDown)
wx.EVT_KEY_DOWN(self.grid.GetGridWindow(), self.OnKeyPress)
def OnMouseMotion(self,event):
if event.Dragging():
return
else:
event.Skip()
def OnMouseLeftDown(self,event):
if event.AltDown() or event.ShiftDown() or event.ControlDown():
return
else:
event.Skip()
def OnKeyPress(self,event):
if event.GetKeyCode() in [wx.WXK_SHIFT,wx.WXK_ALT,wx.WXK_CONTROL,wx.WXK_UP,wx.WXK_DOWN,]:
return
else:
event.Skip()
答案 2 :(得分:0)
我已经看到这个问题很老了,但在互联网上这个论点并没有那么多。
互联网上发布的许多解决方案都没有完成或有些怪癖。 这是我的解决方案。我有一个继承wxGrid的类,使用以下方法
void ReportGrid::DisableRangeHandler (wxGridRangeSelectEvent &ev)
{
if( ev.Selecting() && (ev.GetTopRow() != ev.GetBottomRow()) ) {
ev.StopPropagation();
ev.Veto();
}
}
void ReportGrid::DisableRangeSelectCellHandler (wxGridEvent &ev)
{
SelectRow(ev.GetRow());
}
void ReportGrid::DisableCtrlMaiusHandler (wxGridEvent &ev)
{
if (ev.ControlDown() || ev.ShiftDown()){
ev.Veto();
} else {
ev.Skip();
}
}
void ReportGrid::DisableDraggingHandler (wxMouseEvent &ev)
{
if (ev.Dragging()){
ev.Skip(false);
}
}
void ReportGrid::SingleSelectionMode(bool enabled)
{
if (_singleSelection == enabled){
return;
}
if (enabled){
Bind(wxEVT_GRID_RANGE_SELECT, &ReportGrid::DisableRangeHandler, this);
Bind(wxEVT_GRID_SELECT_CELL, &ReportGrid::DisableRangeSelectCellHandler, this);
Bind(wxEVT_GRID_CELL_LEFT_CLICK, &ReportGrid::DisableCtrlMaiusHandler, this);
GetGridWindow()->Bind(wxEVT_MOTION, &ReportGrid::DisableDraggingHandler, this);
_singleSelection = true;
} else {
Unbind(wxEVT_GRID_RANGE_SELECT, &ReportGrid::DisableRangeHandler, this);
Unbind(wxEVT_GRID_SELECT_CELL, &ReportGrid::DisableRangeSelectCellHandler, this);
Unbind(wxEVT_GRID_CELL_LEFT_CLICK, &ReportGrid::DisableCtrlMaiusHandler, this);
GetGridWindow()->Unbind(wxEVT_MOTION, &ReportGrid::DisableDraggingHandler, this);
_singleSelection = false;
}
}
这是我在wxWidgets上选择单行的最接近的。